经常使用Maven 插件总结

一. 打包类

1. Shade Plugin 

用来打可执行的Jar包web

示例:数据库

<build> 
  <finalName>storm-start-${project.version}</finalName>  
  <plugins> 
    <plugin> 
      <groupId>org.apache.maven.plugins</groupId>  
      <artifactId>maven-shade-plugin</artifactId>  
      <version>2.4.1</version>  
      <executions> 
        <execution> 
          <phase>package</phase>  
          <goals> 
            <goal>shade</goal> 
          </goals>  
          <configuration> 
            <transformers> 
              <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> 
                <manifestEntries> 
                  <Main-Class>sun.storm.start.tutorial.ExclamationTopology</Main-Class>  
                  <X-Compile-Source-JDK>${jdk.version}</X-Compile-Source-JDK>  
                  <X-Compile-Target-JDK>${jdk.version}</X-Compile-Target-JDK> 
                </manifestEntries> 
              </transformer>  
              <transformer implementation="org.apache.maven.plugins.shade.resource.DontIncludeResourceTransformer"> 
                <resource>.txt</resource> 
              </transformer> 
            </transformers>  
            <minimizeJar>true</minimizeJar>  
            <outputDirectory>${project.build.directory}</outputDirectory>  
            <createDependencyReducedPom>true</createDependencyReducedPom>  
            <createSourcesJar>false</createSourcesJar>  
            <keepDependenciesWithProvidedScope>false</keepDependenciesWithProvidedScope> 
          </configuration> 
        </execution> 
      </executions> 
    </plugin> 
  </plugins> 
</build>

shade:shade绑定在package阶段,详细说明参考 http://maven.apache.org/plugins/maven-shade-plugin/apache

2. Jar plugin

示例:app

<plugin> 
  <groupId>org.apache.maven.plugins</groupId>  
  <artifactId>maven-jar-plugin</artifactId>  
  <version>2.6</version>  
  <executions> 
    <execution> 
      <phase>package</phase>  
      <goals> 
        <goal>jar</goal> 
      </goals>  
      <configuration> 
        <classifier>client</classifier>  
        <includes> 
          <include>**/service/*</include> 
        </includes> 
      </configuration> 
    </execution> 
  </executions> 
</plugin>

详细参考: http://maven.apache.org/plugins/maven-jar-plugin/webapp

3. portable-config-maven-plugin 

分不一样环境进行打包,如测试环境、开发环境maven

将若有一个数据库配置文件 src/main/resource/db.properties 以下:ide

database.jdbc.username=dev    database.jdbc.password=dev_pwd

那么在打包的过程当中能够指定替换变量内容,如在测试环境中测试

src/main/portable/test.xml 中配置以下内容:ui

<portable-config> 
  <config-file path="WEB-INF/classes/db.properties"> 
    <replace key="database.jdbc.username">test</replace>  
    <replace key="database.jdbc.password">test_pwd</replace> 
  </config-file> 
</portable-config>

最后在maven中配置插件this

<plugin> 
  <groupId>com.juvenxu.portable-config-maven-plugin</groupId>  
  <artifactId>portable-config-maven-plugin</artifactId>  
  <version>1.1.5</version>  
  <executions> 
    <execution> 
      <goals> 
        <goal>replace-package</goal> 
      </goals> 
    </execution> 
  </executions>  
  <configuration> 
    <portableConfig>src/main/portable/test.xml</portableConfig> 
  </configuration> 
</plugin>

或者使用命令行 

mvn clean package -DportableConfig="src/main/portable/test.xml"

二.核心插件

1. resources plugins

    资源插件主要拷贝项目资源文件到输出目录,资源文件分为两种:main resources 和 test resources,从2.3版本 maven增长了资源过滤的特性( maven filtering)

(1) resources:resources

           copy the resources for the main source code to the main output directory. this goal is bound by default to the process-resources life-cycle phase. It always uses the project.build.resources element to specify the resources, and by default uses the project.build.outputDirectory to specify the copy destination.

    示例:

<build> 
  <resources> 
    <resource> 
      <directory>src/main/resources</directory>  
      <filtering>true</filtering> 
    </resource>  
    <resource> 
      <directory>${project.basedir}/src/main/webapp</directory>  
      <filtering>true</filtering>  
      <includes> 
        <include>**/*.*</include> 
      </includes>  
      <targetPath>${project.build.directory}/webapp</targetPath> 
    </resource> 
  </resources> 
</build>


其中filtering为true表示开启资源过滤,什么意思呢?

例若有一个资源文件 src/main/resources/hello.txt中有如下内容:

Hello ${name}

在pom中定义

<name>world</name>

若是没有开启filtering,拷贝后的文件内容为 Hello ${name},开启后侧为 Hello world

同时配置资源拷贝是的编码

<plugin> 
  <groupId>org.apache.maven.plugins</groupId>  
  <artifactId>maven-resources-plugin</artifactId>  
  <version>2.7</version>  
  <configuration> 
    <encoding>UTF-8</encoding> 
  </configuration> 
</plugin>

执行资源拷贝命令:

mvn clean resources:resources

(2)resources:testResources

<testResources> 
  <testResource> 
    <directory>${project.basedir}/src/test/resources</directory> 
  </testResource> 
</testResources>

2. Compliler Plugin

示例:

<plugin> 
  <groupId>org.apache.maven.plugins</groupId>  
  <artifactId>maven-compiler-plugin</artifactId>  
  <version>2.3.2</version>  
  <configuration> 
    <source>${jdk.version}</source>  
    <target>${jdk.version}</target>  
    <encoding>UTF-8</encoding>  
    <compilerVersion>${jdk.version}</compilerVersion>  
    <verbose>true</verbose> 
  </configuration> 
</plugin>

3. Deploy Plugin

这里介绍使用ftp方式部署

<project>... 
  <distributionManagement> 
    <repository> 
      <id>ftp-repository</id>  
      <url>ftp://repository.mycompany.com/repository</url> 
    </repository> 
  </distributionManagement>  
  <build> 
    <extensions> 
      <!-- Enabling the use of FTP -->  
      <extension> 
        <groupId>org.apache.maven.wagon</groupId>  
        <artifactId>wagon-ftp</artifactId>  
        <version>1.0-beta-6</version> 
      </extension> 
    </extensions> 
  </build> ...
</project>

在settings.xml中配置

<settings>... 
  <servers> 
    <server> 
      <id>ftp-repository</id>  
      <username>user</username>  
      <password>pass</password> 
    </server> 
  </servers> ...
</settings>

执行 mvn deploy

相关文章
相关标签/搜索