常用插件及其用法位于:http://maven.apache.org/plugins/
1. Jetty server plugin
2. Dependency copy plugin
3. Surefire Test plugin
4. Uber jar plugin
5. Maven Source Plugin
1. Jetty Plugin
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>8.1.14.v20131031</version>
<configuration>
<scanIntervalSeconds>3</scanIntervalSeconds>
<connectors>
<connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">
<port>8089</port>
<maxIdleTime>60000</maxIdleTime>
</connector>
</connectors>
</configuration>
</plugin>
功能:为web项目添加一个内置的web服务器,通过这个插件,在plugins目录下会有一个jetty插件项
2. Copy Plugin
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy</id>
<phase>install</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>
${project.build.directory}/flume.kafka.dependencies
</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
将添加了这个plugin的maven模块,在做install操作时将该模块依赖的jar包全部copy到指定目录下
3. Surefire Test Plugin
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<useSystemClassLoader>false</useSystemClassLoader>
<skipTests>true</skipTests>
</configuration>
</plugin>
用于运行单元测试,在该模块下会添加一个插件,
4. Uber Jar Plugin
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.3</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
依赖属性为provided的Dependency不会打到uber jar中
4. Maven Source Plugin
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
XX. maven-compiler-plugin
对模块按照指定的JDK版本进行编译:
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
<encoding>UTF8</encoding>
</configuration>
</plugin>
1.maven-compiler-plugin
参考:http://maven.apache.org/plugins/maven-compiler-plugin/
在多人项目中,比较好的开发实践是项目本身指定JDK的版本,而不是项目组中的每个成员自己来指定。每个人使用的JDK版本不一致,导致代码的编译问题时有发生。
Maven中,可以使用maven-compiler-plugin来指定项目的jdk版本,
在用户管理这个web应用中,有一个聚合和父模块user-project和三个功能模块
user-project
user-core
user-service
user-web
我们可以为每个模块添加maven-compiler-plugin的版本控制,但是这样一来,重复代码甚多,如果要更改JDK的版本,每个功能模块的pom.xml都要修改一次,更合理的做法是在父模块user-project中进行定义,功能模块继承它,这类似于依赖的继承,在user-project的pom中添加如下代码:
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<!--指定代码1.6版本兼容->
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
在user-core,user-service和user-web中,分别做如下定义以继承user-project的maven-compiler-plugin的配置
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
</plugin>
问题:
做如上定义后,在user-core中使用JDK7的类,如ForkJoinPool,没有编译错,编译能成功,这是为什么??
2.maven-rar-plugin
对指定的目录打rar包,参考http://maven.apache.org/plugins/maven-rar-plugin/
3. 编译时跳过module下的测试代码的测试
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.12.4</version>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
4.打成jar包时,指定mainClass
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>sparkStreaming.NetworkWordCount</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
5.将一个Maven模块,连同它依赖的jar打包成Uber Jar
<!-- Maven shade plug-in that creates uber JARs -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.3</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>