2015年06月22日 Maven plugins 浏览(361)

Maven 常用的若干插件详细介绍

本文主要介绍Maven的若干常用第三方插件,内容包括:cobertura、findbugs、source、assembly、maven clean、maven surefire、maven dependency、maven war等的配置和使用,以及Maven插件的原理。

一、maven cobertura插件,主要用来计算java代码测试覆盖率
maven cobertura能计算每个类、包、整个工程的行覆盖率和分支覆盖率以及代码复杂度(Cyclomatic complexity)并生成html或xml形式的报告,让用户很方便的查看代码的单元测试覆盖率情况。cobertura的原理是通过对class文件进行插桩然后计算。

 <plugin>  
      <groupId>org.codehaus.mojo</groupId>  
      <artifactId>cobertura-maven-plugin</artifactId>  
      <version>2.5.1</version>  
 </plugin>

maven cobertura插件的命令有:

mvn cobertura:help          查看cobertura插件的帮助  
mvn cobertura:clean         清空cobertura插件运行结果  
mvn cobertura:check         运行cobertura的检查任务  
mvn cobertura:cobertura     运行cobertura的检查任务并生成报表,报表生成在target/site/cobertura目录下  
cobertura:dump-datafile     Cobertura Datafile Dump Mojo  
mvn cobertura:instrument    Instrument the compiled classes

插件地址为http://mojo.codehaus.org/cobertura-maven-plugin/index.html

二、Maven findbugs插件进行代码静态分析

<plugin>
	<groupId>org.codehaus.mojo</groupId>
	<artifactId>findbugs-maven-plugin</artifactId>
	<version>2.5.1</version>
	<configuration>
		<!-- <configLocation>${basedir}/springside-findbugs.xml</configLocation> -->
		<threshold>High</threshold>
		<effort>Default</effort>
		<findbugsXmlOutput>true</findbugsXmlOutput>
		<!-- findbugs xml输出路径 -->
		<findbugsXmlOutputDirectory>target/findbugs</findbugsXmlOutputDirectory>
	</configuration>
</plugin>

maven findBugs插件的命令有:

    mvn findbugs:help       查看findbugs插件的帮助  
    mvn findbugs:check      检查代码是否通过findbugs检查,如果没有通过检查,检查会失败,但检查不会生成结果报表  
    mvn findbugs:findbugs   检查代码是否通过findbugs检查,如果没有通过检查,检查不会失败,会生成结果报表保存在target/findbugsXml.xml文件中  
    mvn findbugs:gui        检查代码并启动gui界面来查看结果

插件地址为http://mojo.codehaus.org/findbugs-maven-plugin/index.html

三、Maven Source 打包源码的插件

<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-source-plugin</artifactId>
	<version>2.2.1</version>
	<executions>
		<execution>
			<id>attach-sources</id>
			<goals>
				<goal>
					jar-no-fork
					<span></span>
				</goal>
			</goals>
		</execution>
	</executions>
</plugin>				

相关命令介绍:

 执行 mvn install,maven会自动将source install到repository 。
 执行 mvn deploy,maven会自动将source deploy到remote-repository 。
 执行 mvn source:jar,单独打包源码。

四、Maven assembly,自定义打包内容,例如 打包静态文件

<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-assembly-plugin</artifactId>
	<version>${maven-assembly-plugin.version}</version>
	<executions>
		<execution>
			<id>make-assembly</id>
			<phase>package</phase>
			<goals>
				<goal>single</goal>
			</goals>
			<configuration>
				<finalName>
					${project.artifactId}-${project.version}
				</finalName>
				<descriptors>
					<descriptor>
						src/assemble/static-zip.xml
					</descriptor>
				</descriptors>
			</configuration>
		</execution>
	</executions>
</plugin>  				

将静态文件打包成zip文件的static-zip.xml配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<assembly
	xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
	<id>static</id>
	<formats>
		<format>zip</format>
	</formats>
	<includeBaseDirectory>false</includeBaseDirectory>
	<fileSets>
		<fileSet>
			<directory>${basedir}/src/main/webapp/static</directory>
			<outputDirectory>/</outputDirectory>
		</fileSet>
	</fileSets>
</assembly>

五、maven clean 插件,清除上次Maven命令生成的相关文件

<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-clean-plugin</artifactId>
	<version>2.5</version>
	<configuration>
		<filesets>
			<fileset>
				<directory>../myProject/webapp/logs</directory>
			</fileset>
			<fileset>
				<directory>../myProject/target</directory>
			</fileset>
		</filesets>
	</configuration>
</plugin>

六、maven surefire插件用来在maven构建生命周期的test phase执行一个应用的单元测试

maven surefire会产生两种不同形式的测试结果报告:

1).纯文本

2).xml文件格式的

默认情况下,这些文件生成在工程的${basedir}/target/surefire-reports,目录下(basedir指的是pom文件所在的目录)。

它可以运行任何testNG,Junit,pojo写的单元测试

<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-surefire-plugin</artifactId>
	<version>${maven-surefire-plugin.version}</version>
	<configuration>
		<skip>false</skip>
		<testFailureIgnore>true</testFailureIgnore>
		<argLine>
			-Xms128m -Xmx256m -XX:MaxPermSize=512m -XX:PermSize=300m
		</argLine>
	</configuration>
</plugin>	

七、maven dependency拉取项目运行需要的依赖jar包

<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-dependency-plugin</artifactId>
	<version>${maven-dependency-plugin.version}</version>
	<executions>
		<execution>
			<id>copy</id>
			<phase>package</phase>
			<goals>
				<goal>copy-dependencies</goal>
			</goals>
			<configuration>
				<outputDirectory>src/webapp/WEB-INF/lib</outputDirectory>
			</configuration>
		</execution>
	</executions>
</plugin>

八、maven war将web程序打成war包

<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-war-plugin</artifactId>
	<configuration>
		<packagingExcludes>
			static/**
		</packagingExcludes>
	</configuration>
</plugin>	

如果需要做动静分离,则可以如上述,将Java项目排除掉静态资源

九、maven timestamp生成时间戳插件

<plugin>
	<groupId>com.keyboardsamurais.maven</groupId>
	<artifactId>maven-timestamp-plugin</artifactId>
	<version>${maven-timestamp-plugin.version}</version>
	<configuration>
		<propertyName>timestamp</propertyName>
		<timestampPattern>yyyyMMddHHmmss</timestampPattern>
	</configuration>
	<executions>
		<execution>
			<goals>
				<goal>create</goal>
			</goals>
		</execution>
	</executions>
</plugin>

这里生成的时间戳可以被其他Maven插件以${timestamp}的方式访问。可用来生成带有时间戳的名称等。

十、maven svn插件,获取当前SVN的版本

<plugin>
	<groupId>com.google.code.maven-svn-revision-number-plugin</groupId>
	<artifactId>svn-revision-number-maven-plugin</artifactId>
	<version>${svn-revision-number-maven-plugin.vesion}</version>
	<executions>
		<execution>
			<goals>
				<goal>revision</goal>
			</goals>
		</execution>
	</executions>
	<configuration>
		<entries>
			<entry>
				<prefix>SVN</prefix>
			</entry>
		</entries>
	</configuration>
</plugin>

此插件会读取SVN相关属性,可以被其他Maven插件以${SVN.xxxx}的方式访问。如访问当前SVN版本:${SVN.committedRevision}

十一、Maven Jar 打包项目的类、资源文件生成Jar包

<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-jar-plugin</artifactId>
	<version>${maven-jar-plugin.version}</version>
</plugin>



用户头像