项目中有用的Maven命令
一、maven是什么?
Maven这个词可以翻译为“知识的积累”,也可以翻译为“专 家”或“内行”。作为Apache组织中的一个颇为成功的开源项目,Maven主要服务于基于Java平 台的项目构建、依赖管理和项目信息管理。无论是小型的开源类库项目,还是大型的企业级应用;无论是传统的瀑布式开发,还是流行的敏捷模式,Maven都能大显身手。
1. 将没有在maven官方repository中的jar包加入到本地的maven repository中:
mvn install:install-file -Dfile=path-to-your-artifact-jar -DgroupId=your.groupId -DartifactId=your-artifactId -Dversion=your-version -Dpackaging=jar
2. 使Maven2在下载依赖包的同时下载其源代码包和文档的方法:
(Maven import the source code and documentation)
1). 使用maven命令:mvn dependency:sources 下载依赖包的源代码。
2). 使用参数 -DdownloadSources=true 下载源代码jar。 -DdownloadJavadocs=true 下载javadoc包。
mvn eclipse:eclipse -Declipse.useProjectReferences=true -DdownloadSources=true -DdownloadJavadocs=true
mvn dependency:sources -DdownloadSources=true -DdownloadJavadocs=true
mvn -DdownloadSources=true -DdownloadJavadocs=true -DoutputDirectory=target/eclipse-classes eclipse:eclipse
mvn -DdownloadSources=true eclipse:eclipse
更为直观的理解:使用mvn eclise:clean eclipse:eclipse之前,eclipse中项目的布局是:
在使用该命令之后,项目布局是:
3. 使用Maven命令执行java Class的main方法:
mvn exec:java -Dexec.mainClass="com.wsheng.test.RunSampleMainClass" -Dexec.classpathScope=test
4. 在控制台中执行Maven命令时,怎样用log记录查看所有的执行过程中的信息:
1) 如查看maven在install时的具体执行信息:
常规: mvn clean install -DskipTests
查看详细信息: mvn clean install -DskipTests -X -e
2) 将Maven在install时执行的具体信息输出到C盘目录下的log.txt中
a) 首先使用plugin enable dependency tree
. <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.5.1</version>
<executions>
<execution>
<id>build-classpath</id>
<phase>generate-sources</phase>
<goals>
<goal>build-classpath</goal>
</goals>
<configuration>
<!-- configure the plugin here -->
</configuration>
</execution>
</executions>
</plugin>
b). mvn clean install -X > c:/log.txt
5. maven中多个命令可以合并使用:maven –U clean eclipse:clean eclipse:eclipse
mvn clean: 清除目标目录中的生成结果。
mvn eclipse:eclispse: 生成 Eclipse 项目文件及包引用定义,注意,需确保定义Classpath Variables: M2_REPO,指向本地maven类库目录。
6.mvn clean install site -DskipTests -Dmaven.test.skip
- Clean Lifecycle 在进行真正的构建之前进行一些清理工作。
- Default Lifecycle 构建的核心部分,编译(complile),测试(test),打包(package),安装(install), 部署(deploy)等等。mvn clean install会把生成的jar打包到MAVEN的本地仓库中
- Site Lifecycle 生成项目报告,站点,发布站点。
- -Dmaven.test.skip 在编译,打包,部署时忽略测试包中的Class和Resources.
如果想跳过测试阶段,可用:
想临时性跳过测试代码的编译,可用:
maven.test.skip同时控制maven-compiler-plugin和maven-surefire-plugin两个插件的行为,既跳过编译,又跳过测试。
7. mvn -v 查看所在机器上maven的安装版本
8. 设置maven中下载jar包的时候使用代理服务器下载,也可同时设置哪些主机不使用代理。
编辑settings.xml文件
<proxies>
<proxy>
<id>abc</id>
<active>true</active>
<protocol>http</protocol>
<host> </host>
<port></port>
<username>...</username>
<password>....</password>
<nonProxyHosts>.....</nonProxyHosts>
</proxy>
</proxies>
nonproxyhosts指定哪些主机名不使用代理
9.查看Maven中的依赖情况:
mvn dependency:list 可以看到当前项目已解析的依赖
mvn dependency:tree 看到依赖树
mvn dependency:analyse 查看依赖的工具
10. 剪裁反应堆(执行模块)
有时多个模块的话,有可能只是选取其中的某些部分执行:
比如mvn-aggragtor下有mvn-email,mvn-parent,mvn-persist,mvn-email等模块依赖mvn- parent模块,则
mvn clean install -pl account-email -am
-pl:构建指定的模块,模块间用逗号分割 -am:同时构健模块的所依赖的模块
11. Maven跳过测试和测试代码的编译:
跳过测试scope(test):mvn package-DskipTests
跳过测试代码的编译: mvn package-Dmaven.test.skip=true
注: 默认情况下,maven-surefile-plugin的test目标会自动执行测试
src/test/java下的一组命名模式的测试类,该组模式为**/Test*.java:
**/*Test.java:
**/*TestCase.java: 12. Maven中执行指定的测试: mvn test-Dtest=类名 mvn test-Dtest=Random*Test ( 匹配 ) 注: 在pom中,可以自动运行以Tests结尾的测试类
<plugin>
<configuration>
<includes>
<include>**/*Tests.java</include>
</includes>
同样可以用<excludes><exclude>去排除运行测试的类 13. 测试覆盖率报告
mvn跟开源测试覆盖率统计工具 合成,比如
mvn cobertura:cobertura 之后在target/site/cobertura下看到index.html文件 14. 指定Maven只执行某个特定的类中的所有方法:如执行类TestCircle.
mvn -Dtest=TestCircle test当然可以使用匹配模式来指定执行几个class
mvn -Dtest=TestCi*le test更强的地方在于你可以混合使用多个名称和模式,用逗号隔开即可
mvn -Dtest=TestSquare,TestCi*le test15.执行某个类中的几个方法或者某个方法 注意:1. 在2.7.3版本中,在一个Test Class中,你只可以执行多个方法。 2. 只支持Junit4.x和TestNG
mvn -Dtest=TestCircle#mytest test当然,也可以使用模式
mvn -Dtest=TestCircle#test* test在surefire 2.1,可以选择执行多个方法,这种方式只能用junit4.x
mvn -Dtest=TestCircle#testOne+testTwo test16. 如果希望某个Unit Test失败时不会影响其他Unit Test的执行,则使用 -Dmaven.test.failure.ignore=true 其它Maven有用的小知识: 1. maven的编译依赖范围:
compile:默认使用该依赖,对编译,测试,运行三种classpath 都有效
test: 只对测试时有效,如junit
provided:在运行时无效,对编译和测试有效,如servlet-api
runtime:如JDBC,对测试和运行有效,在编译时无效 2. 归类依赖