# 插件机制

Maven 本质上是一个插件的框架、平台。任何一个 Maven 动作(即,命令)都是由具体的插件去完成的。

例如:

  • mvn compile 这个命令,就是由 maven-compiler-plugin 插件提供的。

  • mvn test` 这个命令,就是由 maven-surefire-plugin 插件提供的。

  • mvn package 这个命令,就是由 maven-jar-plugin / maven-war-plugin 插件提供的。

Maven 除了提供了大量的官方插件外,还可以『安装』第三方插件。

插件配置的依赖声明整体结构(其它无关元素略。另外,build 习惯性在 dependencies 的后面)

project 
├── dependencies
└── build
    └── plugins
        ├── plugin
        ├── plugin
        ├── ...
        └── plugin

# 1. 官方插件:Compile 插件

通常,官方插件都是默认激活使用的。一般,我们不会通过自定义的配置去覆盖默认配置。

主要包含如下元素:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>

        <plugin>...</plugin>
        <plugin>...</plugin>
        <plugin>...</plugin>
    <plugins>
</build>

# 2. Tomcat 7 插件

tomcat 7 插件是一个 tomcat 7 容器的裁剪、精简版,并且它还提供了一个 tomcat7:run 命令来用这个裁剪版的运行当前项目。

我们在开发过程中 tomcat7-maven-plugin 就能运行当前项目,查看运行结果。

<build>
    <plugins>
        <plugin>
            <!-- 配置插件 -->
            <groupId>org.apache.tomcat.maven</groupId>
            <artifactId>tomcat7-maven-plugin</artifactId>
            <version>2.2</version>
            <configuration>
                <path>/demo</path>
                <port>8080</port>
                <uriEncoding>UTF-8</uriEncoding>
            </configuration>
        </plugin>

        <plugin>...</plugin>
        <plugin>...</plugin>
        <plugin>...</plugin>
    </plugins>
</build>

警告

有 tomcat 8 本的 maven 插件(即,一个 tomcat 8 容器的裁剪、精简版),但是中央仓库中并没有。所以,如果想要使用 tomcat8-maven-plugin 插件需要自己额外配置下载地址,后续专项讲解。