maven实战笔记(三)

Maven常用插件示例

0. resources管理


<resources>
	<resource>
		<directory>src/main/java</directory>
		<includes>
			<include>**/*.java</include>
			<include>**/*.xml</include>
		</includes>
	</resource>
	<resource>
		<directory>src/main/resources</directory>
		<includes>
			<include>**/*.txt</include>
			<include>**/*.properties</include>
			<include>**/*.xml</include>
		</includes>
	</resource>
</resources>
<testResources>
	<testResource>
		<directory>src/test/java</directory>
		<includes>
			<include>**/*.java</include>
		</includes>
	</testResource>
	<testResource>
		<directory>src/test/resources</directory>
		<includes>
			<include>**/*.txt</include>
			<include>**/*.xml</include>
			<include>**/*.properties</include>
		</includes>
	</testResource>
</testResources>

一.maven-source-plugin

生成源码包, http://maven.apache.org/plugins/maven-source-plugin/
<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-source-plugin</artifactId>
	<version>2.2.1</version>
	<executions>
		<execution>
			<id>attach-source</id><!-- 名称随意指定 -->
			<phase>package</phase><!-- 要绑定到的生命周期的阶段 -->
			<goals>
				<goal>jar-no-fork</goal><!-- 要绑定的插件的目标 -->
			</goals>
		</execution>
	</executions>
</plugin>
这样在mvn package后便会在target目录下生成*-sources.jar源码包。



二. maven-javadoc-plugin

生成javadoc文档, http://maven.apache.org/plugins/maven-javadoc-plugin/
<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-javadoc-plugin</artifactId>
	<version>2.7</version>
	<executions>
		<execution>
			<id>attach-javadocs</id>
			<phase>package</phase>
			<goals>
				<goal>jar</goal>
			</goals>
		</execution>
	</executions>
</plugin>
这样在mvn package后便会在target目录下生成*-javadoc.jar文档包。



三. maven-compiler-plugin

指定JDK版本和编码
maven 2.1默认用jdk 1.3来编译,maven3 貌似是用jdk 1.5,如果项目用的jdk 1.6也会有问题,compiler插件可以指定JDK版本为1.6。
windows默认使用GBK编码,java项目经常编码为utf8,也需要在compiler插件中指出,否则中文乱码可能会出现编译错误。

<plugin> 
	<groupId>org.apache.maven.plugins</groupId> 
	<artifactId>maven-compiler-plugin</artifactId>
	<version>3.1</version> 
	<configuration> 
		<source>1.6</source> 
		<target>1.6</target> 
		<encoding>UTF8</encoding> 
	</configuration> 
</plugin> 

四.maven-surefire-plugin


maven是使用surefire插件执行测试的,它按照指定格式的类名来查找匹配的测试类。

默认包含的测试类:

  • **/*Test.java
  • **/Test*.java
  • **/*TestCase.java

默认排除的测试类:

  • **/Abstract*Test.java
  • **/Abstract*TestCase.java
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.16</version>
    <configuration>
        <argLine>-Xms128m -Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=256m</argLine><!-- 设置单元测试时虚拟机内存 -->
        <includes>
            <include>**/*Test.java</include>
        </includes>
        <excludes>
            <exclude>**/TestConstants.java</exclude>
        </excludes>
        <forkMode>always</forkMode>
    </configuration>
</plugin>
forkMode:Maven运行测试用例时,是通过调用maven的surefire插件并fork一个子进程来执行用例的。forkmode属性中指明是要为每个测试创建一个进程,还是所有测试在同一个进程中完成。forkMode可设置值有 “never”, “once”, “always” 和 “pertest”。pretest: 每一个测试创建一个新进程,为每个测试创建新的JVM是单独测试的最彻底方式,但也是最慢的,不适合hudson上持续回归。once:在一个进程中进行所有测试。once为默认设置,在Hudson上持续回归时建议使用默认设置。always:在一个进程中并行的运行脚本,Junit4.7以上版本才可以使用,

使用该插件需要指定如下内容:

<testSourceDirectory>src/test/java</testSourceDirectory>
<testOutputDirectory>target/test-classes</testOutputDirectory>
<testResources>
	<testResource>
		<directory>src/test/java</directory>
		<includes>
			<include>**/*.xml</include>
			<include>**/*.properties</include>
			<include>**/*.java</include>
		</includes>
	</testResource>
	<testResource>
		<directory>src/test/resources</directory>
		<includes>
			<include>**/*.xml</include>
			<include>**/*.properties</include>
		</includes>
	</testResource>
</testResources>


跳过单元测试



<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-surefire-plugin</artifactId>
	<configuration>
		<skipTests>true</skipTests>
	</configuration>
</plugin>
skip=true,表示跳过单元测试,相当于-Dmaven.test.skip=true。

但是在执行mvn test -Dtest时,也会被跳过。解决方法是用excludes跳过所有测试,而不是用skipTests.

<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-surefire-plugin</artifactId>
	<version>2.16</version>
	<configuration>
		<!-- <skipTests>true</skipTests> -->
		<excludes>
			<exclude>**/*.java</exclude>
		</excludes>
	</configuration>
</plugin>
即跳过所有test。这样再执行mvn test -Dtest就没有问题了。


五.maven-shade-plugin

构建包含依赖的jar包,http://maven.apache.org/plugins/maven-shade-plugin/


<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-shade-plugin</artifactId>
	<version>1.4</version>
	<executions>
		<execution>
			<phase>package</phase><!-- 要绑定到的生命周期的阶段 -->
			<goals>
				<goal>shade</goal><!-- 要绑定的插件的目标 -->
			</goals>
			<configuration>
				<transformers>
					<transformer
						implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
						<mainClass>com.adu.mvn_test.HelloWorld</mainClass><!-- 指定可执行jar包的主程序入口 -->
					</transformer>
				</transformers>
			</configuration>
		</execution>
	</executions>
</plugin>
mvn clean package后,target下可以看到 mvn-test-0.0.1-SNAPSHOT.jar original-mvn-test-0.0.1-SNAPSHOT.jar 两个jar包,前者是带有依赖包(会解压)和Main-Class信息的可运行jar包,后者是原始的jar包(不包含依赖及Main-Class信息)。
打开mvn-test-0.0.1-SNAPSHOT.jar/META-INF/MANIFEST.MF可看到Main-Class: com.adu.mvn_test.HelloWorld信息。
可运行jar包的执行:$java -jar mvn-test-0.0.1-SNAPSHOT.jar 或者直接双击。


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值