项目中有用的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:
<plugin>
<configuration>
<includes>
<include>**/*Tests.java</include>
</includes>
同样可以用<excludes><exclude>去排除运行测试的类
mvn跟开源测试覆盖率统计工具 合成,比如
mvn cobertura:cobertura 之后在target/site/cobertura下看到index.html文件
mvn -Dtest=TestCircle test
mvn -Dtest=TestCi*le test
mvn -Dtest=TestSquare,TestCi*le test
mvn -Dtest=TestCircle#mytest test
mvn -Dtest=TestCircle#test* test
mvn -Dtest=TestCircle#testOne+testTwo test
compile:默认使用该依赖,对编译,测试,运行三种classpath 都有效
test: 只对测试时有效,如junit
provided:在运行时无效,对编译和测试有效,如servlet-api
runtime:如JDBC,对测试和运行有效,在编译时无效
比如spring下的很多模块,都是同一个项目的,版本都相同,则为了优化,可以这样,
先定义一个<properties>项,即
<properties>
<abc>1.0</abc>
</properties>
然后其他的dependcy中,可以这样 <version>${abc}</version>
3. MVN的仓库
MVN仓库的路径形式为groupId/artifactId/version/articatId-version.packagin
仓库分为本地仓库和远程仓库
本地仓库的路径修改,可以修改settings.xml
<settings>
<localRepository>d:\java\......</localRepository>
</settings>
4. MVN的生命周期:clean(清理项目),default是构建项目,site是建立项目站点
5. MVN的插件和目标的对应关系
dependcy:analyze 冒号前面是插件前缀,冒号后面是插件的目标
6. Maven中的 聚合
当想一次过构建多个模块时,可以使用聚合,关系是包含和被包含的关系:
<modules>
<module>.. </module>
<module>.....</module>
</modules>
7. Maven中依赖关系的Scope
在POM 4中,<dependency>中还引入了<scope>,它主要管理依赖的部署。目前<scope>可以使用5个值:
* compile,缺省值,适用于所有阶段,会随着项目一起发布。
* provided,类似compile,期望JDK、容器或使用者会提供这个依赖。如servlet.jar。
* runtime,只在运行时使用,如JDBC驱动,适用运行和测试阶段。
* test,只在测试时使用,用于编译和运行测试代码。不会随项目发布。
* system,类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它。
8、安装本地jar包到本地仓库中:
是自己编写的一个jar文件,每次添加单个jar到maven本地仓库的操作如下: 1.建立一个新的文件夹,将jar文件存放在该文件夹下。 注意文件夹下最好只存放该文件。 2.在该文件夹下建立一个pom.xml文件,在pom文件中定义其maven坐标。 3.在cmd窗口中执行以下命令: mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> -DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging>
例如:
mvn install:install-file -Dfile=D:/jar/xxx.jar -DgroupId=xxx.xxx -DartifactId=xxx -Dversion=x.x -Dpackaging=jar
如:
mvn install:install-file -Dfile=plexus-utils-1.1.jar -DgroupId=org.codehaus.plexus -DartifactId=plexus-utils -Dversion=1.1 -Dpackaging=jar