Maven使用

一、生命周期

整个build生命周期包含多个phrase
默认的生命周期由以下phrase组成(按执行先后数序排列):
validate:验证项目合法并具备了所有需要的信息
initialize:初始化操作(创建目录结构)
generate-sources:生成项目源代码
process-source:处理项目源代码
generate-resource:生成项目资源文件
process-resource:将资源文件拷贝到目标路径
compile:编译项目源代码
process-class:编译后处理
generate-test-source:生成测试代码
process-test-source:对测试代码进行处理
generate-test-resource:生成测试资源
process-test-resource:对测试资源进行处理
test-compile:编译测试代码
process-test-classes:处理编译后的测试代码
test:执行单元测试
prepare-package:打包之前的准比操作
package:执行打包操作
pre-integration-test
:集成测试之前的准备操作(创建集成测试环境)
integration-test:执行集成测试
post-integration-test:集成测试之后的操作(删除测试环境)
verify:检查打包后的项目是否符合质量标准。
install:将打包好的项目安装到本地repository,供其他项目引用
deploy:将项目部署到远程的repository

二、Plugin插件

phrase并不是Maven最小的执行单元,一个phrase可能包含多个goal,每一个goal才是最小的操作集,在maven中,goal的实现是通过plugin来完成的,并且一个plugin可实现多个goal,pom配置中,可通过<plugin>标签,为phrase引入具体的goal
<plugin>
   <groupId>com.mycompany.example</groupId>
   <artifactId>display-maven-plugin</artifactId>    <!--引入的plugin-->
   <version>1.0</version>
   <executions>
     <execution>
       <phase>process-test-resources</phase>        <!--该plugin应用在哪个phrase上-->
       <goals>
         <goal>time</goal>                <!--执行plugin的哪一个goal-->
       </goals>
       <configuration>                    <!--配置goal在执行中需要的参数-->
         <models>
           <model>src/main/mdo/maven.mdo</model>
         </models>
         <version>4.0.0</version>
       </configuration>
     </execution>
   </executions>
 </plugin>

三、profile管理

一个项目,如果需求的产出不同,那么可能需要多种不同的build方式,比如项目P有2个子模块moduleA和moduleB,如果客户A只需要moduleA模块,而客户B只需要moduleB模块。那么是否需要通过切换不同的pom.xml来满足不同客户的构建需求呢?当然不用,因为maven提供了profile的功能。
通过profile可以满足按需求定制构建内容的功能,每一个个性化的build封装成一个profile,通过相应的触发器触发来达到不同的构建效果。
pom中是通过<profile>标签来配置的,针对上述需求可做如下配置
<profiles>
    <profile>
              <id>customeA</id>
              <activation><!--activation用来定义profile的触发方式-->
                  <property>
                    <name>custome</name><!--当存在系统变量custome并且值为A的时候触发profile-->
                    <value>A</value>
                  </property>
              </activation>
              <modules><!--主项目的module构建完成之后,会构建profile声明的module-->
                <module>moduleA</module>
              </modules>
        </profile>
        <profile>
              <id>customeB</id>
            <activation>
                  <property>
                    <name>custome</name>
                    <value>B</value>
                  </property>
              </activation>
              <modules>
                <module>moduleB</module>
              </modules>
        </profile>
<profiles>

四、依赖管理

传统项目中,搭建开发环境比较头疼的是jar包资源的管理,jar包之间深层次的依赖关系,版本冲突等等常常为开发人员带来不便
mavne项目引入dependency机制,可通过pom管理系统依赖jar
maven管理jar包的特点:
1.子项目自动含有父项目的jar包
2.X项目引用Y项目,Y项目引用Z项目,则X项目自动引用Z项目
通过maven管理项目的上下级结构更便于模块化开发,让开发人员更直观的了解系统体系结构
pom中,dependency的定义主要通过dependency标签,另外还提供了dependencyManagement标签
熟悉java设计模式的人该知道,日常编程中我们经常要用到模版方法模式(抽象类中声明模版,子类继承模版元素)
同样,dependencyManagement相当于定义了一个依赖模版,声明了所依赖artifact的详细信息(version,scope,exclusion等),这样子项目在引用这些artifact时便可不用再次声明
父项目:
<project>
  ...
  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>group-a</groupId>
        <artifactId>artifact-a</artifactId><!--声明依赖artifact的详细信息:版本、范围和exclusion-->
        <version>1.0</version>
        <scope>runtime</scope>
        <exclusions>
          <exclusion>
            <groupId>group-c</groupId>
            <artifactId>excluded-artifact</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
    <dependencies>  
    ...
</project>
子项目:
<project>
  ...
  <dependencies>
    <dependency>
      <groupId>group-a</groupId>
      <artifactId>artifact-a</artifactId><!--子项目中无需在声明artifact具体的详细信息-->
    </dependency>
  </dependencies>
  ...
</project>
注意:通过<dependencyManagement>标签管理的artifact,如果没有子项目引用那么是不会加载到项目里的

五、其他

1.知识库管理
maven提供两种类型的repository,local和remote
成功安装maven后,local存在用户的home目录下,用来缓存远程repository下载下来的artifact
默认情况下maven所使用的远端repository地址为 http://repo.maven.apache.org/maven2/
在pom中,可通过配置<repository>标签来引入第三方的repository
通过apacheArchiva项目,开发人员还可构建自己的repository,项目地址 http://archiva.apache.org/index.cgi
2.常用命令参数
 -P  选定profile
 -pl 选定模块
 -D  设置系统变量
3.Eclipse插件
http://maven.apache.org/eclipse-plugin.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值