Maven杂记(命令,裁剪反应堆)

本文介绍了Maven的常用命令,如裁剪反应堆,详细讲解了超级POM的概念,同时还探讨了内置属性和POM属性的使用,揭示了不同构建环境下的差异。

命令

mvn help:system。该命令会打印出所有的Java系统属性和环境变量,从命令行输出看到Maven会下载maven-help-plugin,包括pom文件和jar文件。这些文件都被下载到了Maven本地仓库中。

首先确认自己无法直接访问公共的Maven中央仓库,直接运行命令ping repo1.maven.org可以检查网络。


测试用例编写完毕之后就可以调用Maven执行测试。运行mvn clean test:

package命令完成了项目编译、单元测试、打包功能,但没有把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库和远程maven私服仓库
install命令完成了项目编译、单元测试、打包功能,同时把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库,但没有布署到远程maven私服仓库
deploy命令完成了项目编译、单元测试、打包功能,同时把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库和远程maven私服仓库



mvn clean compile
mvn clean package
mvn clean install

mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=myapp -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

查看已解析依赖:
mvn dependency:list
查看当前项目依赖树:
mvn dependency:tree
帮助分析当前项目的依赖
mvn dependency:analyze

used undeclared dependencies //使用但未声明
unused declared dependencies //未使用但声明了的

跳过测试用例
mvn clean package -DskipTests
跳过测试用例,并临时性的跳过测试代码编译
mvn clean package -Dmaven.test.skip=true

参数maven.test.skip同时控制了maven-compiler-plugin和maven-surefire-plugin两个插件的行为,测试代码编译跳过了,测试运行也跳过了。

动态指定要运行的测试用例
$mvn test-Dtest=RandomGeneratorTest

10.5 包含与排除测试用例
例如,由于历史原因,有些项目所有测试类名称都以Tests结尾,这样的名字不符合默认的3种模式,因此不会被自动运行,用户可以通过代码清单10-14所示的配置让Maven自动运行这些测试。
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.5</version> <configuration> <includes> <include>**/*Tests.java</include> </includes> </configuration></plugin>
上述代码清单中使用了**/*Tests.java来匹配所有以Tests结尾的Java类,两个星号**用来匹配任意路径,一个星号*匹配除路径风格符外的0个或者多个字符。
类似地,也可以使用excludes元素排除一些符合默认命名模式的测试类,如代码清单10-15所示。
<excludes> <exclude>**/*ServiceTest.java</exclude> <exclude>**/TempDaoTest.java</exclude> </excludes>



定义

7.2.2 clean生命周期 clean生命周期的目的是清理项目,它包含三个阶段: 1)pre-clean执行一些清理前需要完成的工作。 2)clean清理上一次构建生成的文件。 3)post-clean执行一些清理后需要完成的工作。

7.2.3 default生命周期 default生命周期定义了真正构建时所需要执行的所有步骤,它是所有生命周期中最核心的部分,其包含的阶段如下,这里笔者只对重要的阶段进行解释: validate initialize generate-sources process-sources处理项目主资源文件。一般来说,是对src/main/resources目录的内容进行变量替换等工作后,复制到项目输出的主classpath目录中。 generate-resources process-resources compile编译项目的主源码。一般来说,是编译src/main/java目录下的Java文件至项目输出的主classpath目录中。 process-classes generate-test-sources process-test-sources处理项目测试资源文件。一般来说,是对src/test/resources目录的内容进行变量替换等工作后,复制到项目输出的测试classpath目录中。

7.2.4 site生命周期 site生命周期的目的是建立和发布项目站点,Maven能够基于POM所包含的信息,自动生成一个友好的站点,方便团队交流和发布项目信息。该生命周期包含如下阶段: pre-site执行一些在生成项目站点之前需要完成的工作。 site生成项目站点文档。 post-site执行一些在生成项目站点之后需要完成的工作。 site-deploy将生成的项目站点发布到服务器上。

除了默认的打包类型jar之外,常见的打包类型还有war、pom、maven-plugin、ear等。




超级pom


对于Maven 3,超级POM在文件$MAVEN_HOME/lib/maven-model-builder-x.x.x.jar中的org/apache/maven/model/pom-4.0.0.xml路径下。对于Maven 2,超级POM在文件$MAVEN_HOME/lib/maven-x.x.x-uber.jar中的org/apache/maven/project/pom-4.0.0.xml目录下。这里的x.x.x表示Maven的具体版本。

裁剪反应堆

p3410 (MAVEN实战书的第3410页)
Maven提供很多的命令行选项支持裁剪反应堆,输入mvn-h可以看到这些选项:
 -am, ——also-make同时构建所列模块的依赖模块
 -amd  ——also-make-dependents同时构建依赖于所列模块的模块
 -pl   ——projects<arg>构建指定的模块,模块间用逗号分隔
 -rf   ——resume-from<arg>从指定的模块回复反应堆 使用-rf选项可以在完整的反应堆构建顺序基础上指定从哪个模块开始构建。


下面还是以账户服务为例(为合并聚合和继承),解释这几个选项的作用。默认情况从account-aggregator执行mvn clean install会得到如下完整的反应堆:
[INFO] Account Aggregator 
[INFO] Account Parent 
[INFO] Account Email 
[INFO] Account Persist

可以使用-pl选项指定构建某几个模块,如运行如下命令: $mvn clean install-pl account-email,account-persist

[INFO] Account Email 
[INFO] Account Persist

使用-am选项可以同时构建所列模块的依赖模块。例如: $mvn clean install -pl account-email -am 

由于account-email依赖于account-parent,因此会得到如下反应堆:
[INFO] Account Parent
[INFO] Account Email

使用-amd选项可以同时构建依赖于所列模块的模块。例如: $ mvn clean install -pl account-parent -amd 
由于account-email和account-persist都依赖于account-parent,因此会得到如下反应堆:
[INFO] Account Parent 
[INFO] Account Email 
[INFO] Account Persist

使用-rf选项可以在完整的反应堆构建顺序基础上指定从哪个模块开始构建。例如: $ mvn clean install -rf account-email 
完整的反应堆构建顺序中,account-email位于第三,它之后只有account-persist,因此会得到如下的裁剪反应堆:
[INFO] Account Email 
[INFO] Account Persist

最后,在-pl -am或者-pl -amd的基础上,还能应用-rf参数,以对裁剪后的反应堆再次裁剪。例如: $ mvn clean install -pl account-parent -amd -rf account-email 
该命令中的-pl和-amd参数会裁剪出一个account-parent、account-email和account-persist的反应堆,在此基础上,-rf参数指定从account-email参数构建。因此会得到如下的反应堆:
[INFO] Account Email 
[INFO] Account Persist

内置属性和POM属性

内置属性:主要有两个常用内置属性——${basedir}表示项目根目录,即包含pom.xml文件的目录;${version}表示项目版本。

POM属性:用户可以使用该类属性引用POM文件中对应元素的值。例如${project.artifactId}就对应了<project><artifactId>元素的值,常用的POM属性包括:
■${project.build.sourceDirectory}:项目的主源码目录,默认为src/main/java/。
■${project.build.testSourceDirectory}:项目的测试源码目录,默认为src/test/java/。 
■${project.build.directory}:项目构建输出目录,默认为target/。
■${project.outputDirectory}:项目主代码编译输出目录,默认为target/classes/。
■${project.testOutputDirectory}:项目测试代码编译输出目录,默认为target/test-classes/。
■${project.groupId}:项目的groupId。
■${project.artifactId}:项目的artifactId。 
■${project.version}:项目的version,与${version}等价。 
■${project.build.finalName}:项目打包输出文件的名称,默认为${project.artifactId}-${project.version}。

[INFO] basedir=D:\code\uhr\uhr-common
[INFO] sourceDirectory=D:\code\uhr\uhr-common\src\main\java

构建环境的差异

 <profiles>
        <!--deploy env-->
        <profile>
            <id>daily</id>
            <properties>
                <deploy.env>daily</deploy.env>
            </properties>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
        <profile>
            <id>online</id>
            <properties>
                <deploy.env>online</deploy.env>
            </properties>
        </profile>
    </profiles>
<build>
        <finalName>uhr</finalName>
        <filters>
            <filter>../conf/conf-${deploy.env}.properties</filter>
        </filters>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*</include>
                </includes>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值