maven提供了丰富的plugins。
maven是一个插件执行的框架。
核心部分的描述:
- clean.
- clean插件。
- goal:clean
- 清除构建时生成的文件,文件目录
- project.build.directory,
- project.build.outputDirectory,
- project.build.testOutputDirectory,
- project.reporting.outputDirectory.
- 使用示例
- 忽略错误
- 忽略清除中的错误
-
命令行:mvn clean -Dmaven.clean.failOnError=false
-
<build> [...] <plugin> <artifactId>maven-clean-plugin</artifactId> <version>2.5</version> <configuration> <failOnError>false</failOnError> </configuration> </plugin> [...] </build>
默认构建时执行clean命令:
<project>[...] <build> <plugins> <plugin> <artifactId>maven-clean-plugin</artifactId> <version>2.5</version> <executions> <execution> <id>auto-clean</id> <phase>initialize</phase> <goals> <goal>clean</goal> </goals> </execution> </executions> </plugin> </plugins> </build> [...] </project>
-
- 忽略清除中的错误
- 忽略clean操作
- 命令行:
mvn clean -Dclean.skip=true
- pom配置:
-
<build> [...] <plugin> <artifactId>maven-clean-plugin</artifactId> <version>2.5</version> <configuration> <skip>true</skip> </configuration> </plugin> [...] </build>
- 命令行:
- 删除指定文件
- pom配置
-
<build> [...] <plugin> <artifactId>maven-clean-plugin</artifactId> <version>2.5</version> <configuration> <filesets> <fileset> <directory>some/relative/path</directory> <includes> <include>**/*.tmp</include> <include>**/*.log</include> </includes> <excludes> <exclude>**/important.log</exclude> <exclude>**/another-important.log</exclude> </excludes> <followSymlinks>false</followSymlinks> </fileset> </filesets> </configuration> </plugin> [...] </build>
路径可以为相对或绝对。
- 忽略错误
- compiler
- 编译器:
- 3.0+: javax.tools.JavaCompiler
- 3.0-:javac
- 默认编译:1.5
- 目标:均属已绑定
- compile
- testcompile
- 使用示例
- 命令行:
- mvn compile
- mvn testcompile
- pom
- 自动编译
<project> ... <build> <pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <!-- put your configurations here
<configuration>
<source>1.4</source><target>1.4</target> </configuration>
--> </configuration> </plugin> </plugins> </pluginManagement> </build> ... </project>指定不同的jdk:
-
<project> [...] <build> [...] <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <verbose>true</verbose> <fork>true</fork> <executable><!-- path-to-javac --></executable> <compilerVersion>1.3</compilerVersion> </configuration> </plugin> </plugins> [...] </build> [...] </project>
//指定内存:<fork>true</fork>
<meminitial>128m</meminitial> <maxmem>512m</maxmem>
//指定参数<compilerArgument>-verbose -bootclasspath ${java.home}lib t.jar</compilerArgument>
或这样的形式:<compilerArguments> <verbose /> <bootclasspath>${java.home}lib t.jar</bootclasspath> </compilerArguments>
- 自动编译
- 命令行:
- 编译器:
- deploy
- goal:
- 使用
- distribute设置:
-
<distributionManagement> <repository> <id>xx-repository</id> <url>ftp://repository.mycompany.com/repository</url> </repository> </distributionManagement>
settings.xml中须包含id对应的配置“<servers> <server> <id>xx-repository</id> <username>user</username> <password>pass</password> </server> </servers>
- pom中buil的设置
-
<build> <extensions> <extension> <groupId>org.apache.maven.wagon</groupId> <artifactId>wagon-ftp</artifactId> <version>1.0-beta-6</version> </extension> </extensions> </build>
- 无pom的deploy
-
mvn org.apache.maven.plugins:maven-deploy-plugin:2.8.1:deploy-file -Durl=file:///C:/m2-repo -DrepositoryId=some.id -Dfile=path-to-your-artifact-jar -DgroupId=your.groupId -DartifactId=your-artifactId -Dversion=version -Dpackaging=jar -DgeneratePom=false
指定类型的:mvn org.apache.maven.plugins:maven-deploy-plugin:2.8.1:deploy-file -Durl=http://localhost:8081/repomanager/ -DrepositoryId=some.id -Dfile=path/to/artifact-name-1.0.jar -DpomFile=path-to-your-pom.xml -Dfiles=path/to/artifact-name-1.0-debug.jar,path/to/site.pdf -Dclassifiers=debug,site -Dtypes=jar,pdf
- failsafe
- 运行junit 集成测试,使用独立的classloader
- 与sufire的单元测试运行不同,该插件运行的是集成测试
- 生命周期内会用到该插件的:
- pre-integration-test for setting up the integration test environment.
- integration-test for running the integration tests.
- post-integration-test for tearing down the integration test environment.
- verify for checking the results of the integration tests.
- goal
- 结果
- Plain text files (*.txt)
- XML files (*.xml)
- ${basedir}/target/failsafe-reports.
- 使用
-
<plugins> [...] <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-failsafe-plugin</artifactId> <version>2.16</version> <dependencies>
//设置surefire的provider版本 <dependency> <groupId>org.apache.maven.surefire</groupId> <artifactId>surefire-junit47</artifactId> <version>2.16</version> </dependency>
</dependencies>
//设置并发<configuration> <parallel>methods</parallel> <threadCount>10</threadCount> </configuration>
//报表设置:(自定义)
<configuration> <properties> <property> <name>listener</name> <value>com.mycompany.MyResultListener,com.mycompany.MyResultListener2</value> </property> </configuration>
</plugin> [...] </plugins>
集成测试 后续再深入探讨
-
- 运行junit 集成测试,使用独立的classloader
- install
- install Install the built artifact into the local repository.
- goal
- install:install:自动install主要文件:jar、war、ear
- install:install-file : externally created artifact into the local repository, along with its POM
- install:help
- 使用
- 命令行
-
mvn org.apache.maven.plugins:maven-install-plugin:2.5.1:install-file -Dfile=path-to-your-artifact-jar -DpomFile=path-to-pom
校验和设置
-
mvn install -DcreateChecksum=true
install 源码:
mvn org.apache.maven.plugins:maven-install-plugin:2.5.1:install-file -Dfile=path-to-commons-logging-sources.jar -DgroupId=commons-logging -DartifactId=commons-logging -Dversion=1.0.3 -Dpackaging=jar -Dclassifier=sources
-
- 命令行
- surefire
- mvn test使用
- 生成测试结果:
- Plain text files (*.txt)
- XML files (*.xml)
- 目录: ${basedir}/target/surefire-reports.
- goal:
- surefire:test
-
示例:
<plugins> [...] <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.16</version> <configuration> <parallel>methods</parallel> <threadCount>10</threadCount> </configuration> </plugin> [...] </plugins>
设置路径:<configuration> <additionalClasspathElements> <additionalClasspathElement>path/to/additional/resources</additionalClasspathElement> <additionalClasspathElement>path/to/additional/jar</additionalClasspathElement> </additionalClasspathElements> </configuration>
- site:粗糙带过
- goal
-
- site:site is used generate a site for a single project. Note that links between module sites in a multi module build will not work, since local build directory structure doesn't match deployed site.
- site:deploy is used to deploy the generated site using Wagon supported protocol to the site URL specified in the <distributionManagement> section of the POM.
- site:run starts the site up, rendering documents as requested for faster editing. It uses Jetty as the web server.
- site:stage generates a site in a local staging or mock directory based on the site URL specified in the <distributionManagement> section of the POM. It can be used to test that links between module sites in a multi module build works.
- site:stage-deploy deploys the generated site to a staging or mock directory to the site URL specified in the <distributionManagement> section of the POM.
- site:attach-descriptor adds the site descriptor (site.xml) to the list of files to be installed/deployed. For more references of the site descriptor, here's a link.
- site:jar bundles the site output into a JAR so that it can be deployed to a repository.
- site:effective-site calculates the effective site descriptor, after inheritance and interpolation.
-
- 使用
-
<project> ... <reporting> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-project-info-reports-plugin</artifactId> <version>2.6</version> <reportSets> <reportSet> <reports><!-- select reports --> <report>index</report> </reports> <reportSet> </reportSets> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-javadoc-plugin</artifactId> <version>2.9</version> <reportSets> <reportSet><!-- by default, id = "default" --> <reports><!-- select non-aggregate reports --> <report>javadoc</report> <report>test-javadoc</report> </reports> </reportSet> <reportSet><!-- aggregate reportSet, to define in poms having modules --> <id>aggregate</id> <inherited>false</inherited><!-- don't run aggregate in child modules --> <reports> <report>aggregate</report> </reports> </reportSet> </reportSets> </plugin> </plugins> </reporting> ... </project>
- goal