maven之怎么做?

依赖关系管理

通常情况下,我们已经一套项目在一个共同的项目下。在这种情况下,我们可以创造让所有的公共依赖一个共同的POM,然后进行分项目POMS为这个POM父。下面的例子将帮助你理解这个概念

dependency graph

以下是上述的依赖图的细节

  • APP-UI-WAR依赖于App-Core-lib和 App-Data-lib。

  • Root 是 App-Core-lib 和 App-Data-lib 的父类。

  • Root 定义LIB1,LIB2,Lib3作为其依赖部分依赖关系。

App-UI-WAR

<project xmlns="http://maven.apache.org/POM/4.0.0"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
   http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>com.companyname.groupname</groupId>
      <artifactId>App-UI-WAR</artifactId>
      <version>1.0</version>
      <packaging>war</packaging>
      <dependencies>
         <dependency>
            <groupId>com.companyname.groupname</groupId>
            <artifactId>App-Core-lib</artifactId>
            <version>1.0</version>
         </dependency>
      </dependencies>  
      <dependencies>
         <dependency>
            <groupId>com.companyname.groupname</groupId>
            <artifactId>App-Data-lib</artifactId>
            <version>1.0</version>
         </dependency>
      </dependencies>  
</project>

App-Core-lib

<project xmlns="http://maven.apache.org/POM/4.0.0"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
   http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <parent>
         <artifactId>Root</artifactId>
         <groupId>com.companyname.groupname</groupId>
         <version>1.0</version>
      </parent>
      <modelVersion>4.0.0</modelVersion>
      <groupId>com.companyname.groupname</groupId>
      <artifactId>App-Core-lib</artifactId>
      <version>1.0</version> 
      <packaging>jar</packaging>
</project>

App-Data-lib

<project xmlns="http://maven.apache.org/POM/4.0.0"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
   http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <parent>
         <artifactId>Root</artifactId>
         <groupId>com.companyname.groupname</groupId>
         <version>1.0</version>
      </parent>
      <modelVersion>4.0.0</modelVersion>
      <groupId>com.companyname.groupname</groupId>
      <artifactId>App-Data-lib</artifactId>
      <version>1.0</version>   
      <packaging>jar</packaging>
</project>

Root

<project xmlns="http://maven.apache.org/POM/4.0.0"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
   http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>com.companyname.groupname</groupId>
      <artifactId>Root</artifactId>
      <version>1.0</version>
	  <packaging>pom</packaging>
      <dependencies>
         <dependency>
            <groupId>com.companyname.groupname1</groupId>
            <artifactId>Lib1</artifactId>
            <version>1.0</version>
         </dependency>
      </dependencies>  
      <dependencies>
         <dependency>
            <groupId>com.companyname.groupname2</groupId>
            <artifactId>Lib2</artifactId>
            <version>2.1</version>
         </dependency>
      </dependencies>  
      <dependencies>
         <dependency>
            <groupId>com.companyname.groupname3</groupId>
            <artifactId>Lib3</artifactId>
            <version>1.1</version>
         </dependency>
      </dependencies>  
</project>

现在,当我们建立App-UI-WAR项目,Maven会发现所有的依赖通过遍历依赖图和构建应用程序。

从上面的例子中,我们可以学到以下关键概念

  • 常见的依赖关系可以用父POM的概念被放置在一个地方。 App-Data-lib 和 App-Core-lib 项目列表在 Root 目录(见Roots包类型。它是POM).

  • 不需要Lib1, lib2, Lib3 作为依赖于 App-UI-WAR. Maven使用传递性依赖机制来管理这些细节。

构建生命周期是什么?

构建生命周期阶段的目标是执行顺序是一个良好定义的序列。
这里使用一个例子,一个典型的 Maven 构建生命周期是由下列顺序的阶段:

阶段处理描述
准备资源资源复制资源复制可以进行定制
编译执行编译源代码编译在此阶段完成
包装打包创建JAR/WAR包如在 pom.xml 中定义提及的包
安装安装这一阶段在本地/远程Maven仓库安装程序包

可用于注册必须执行一个特定的阶段之前或之后的目标,有之前处理和之后阶段。
当 Maven 开始建立一个项目,它通过定义序列阶段步骤和执行注册的每个阶段的目标。 Maven拥有三套相互独立的生命周期,它们分别为clean、default和site。clean生命周期的目的是清理项目,default生命周期的目的是构建项目,而site生命周期的目的是建立项目站点。

  • clean

  • default(或 build)

  • site

命令行与生命周期

从命令行执行Maven任务的最主要方式就是调用Maven生命周期阶段。需要注意的是,各个生命周期之间是相互独立的,而一个生命周期的阶段室友前后依赖关系的。下面以一下常用的Maven命令为例,解释其执行的生命周期阶段:

  • $mvn clean:该命令调用clean生命周期的clean阶段。实际执行的阶段为clean生命周期的pre-clean和clean阶段。
  • $mvn test:该命令调用default生命周期的test阶段。实际执行的阶段为default生命周期的validate、initialize等,知道test的所有阶段。这也解释了为什么在执行测试的时候,项目代码能够自动得到编译。
  • $mvn clean install:调用clean生命周期的clean阶段和default生命周期的install阶段。实际执行为clean生命周期的pre-clean、clean阶段,以及default生命周期的从validate至install的所有阶段。
  • $mvn clean deploy site-deploy:该命令调用了clean生命周期的clean阶段、defalut生命周期的deploy阶段,以及site生命周期的site-deploy阶段。实际执行的阶段为clean生命周期的pre-clean、clean阶段,default生命周期的所有阶段和site生命周期的所有阶段。

clean生命周期

clean生命周期的目的是清理项目,它包含三个阶段:

  • per-clean:执行一些清理前需要完成的工作。
  • clean:清理上一次构建生成的文件。
  • post-clean:执行一些清理后需要完成的工作。
default生命周期

default生命周期定义了真正构建时所需要执行的所有步骤,它是所有生命周期中最核心的部分,其包含的阶段如下,这里只对重要的阶段进行解释:

  • validate
  • initialize
  • generate-sources
  • process-sources
  • generate-resources: 处理项目主资源文件。一般来说,是对src/main/resources目录的内容进行变量替换等工作后,复制到项目输出的主classpath目录中
  • genetate-resources
  • process-resources
  • compile:编译项目的主代码。一般来说,是编译src/main/java目录下的java文件至项目输出的主classpath目录中。
  • process-classes
  • generate-test-sources
  • process-test-sources:处理项目测试资源文件。一般来说,是对src/test/resources目录的内容进行变量替换工作后,复制到项目输出的测试classpath目录下。
  • generate-test-resources
  • process-test-resources
  • test-compile:编译项目的测试代码。一般来说,是编译src/test/java目录下的java文件至项目输出的测试classpath目录中。
  • process-test-classes
  • test:使用单元测试框架运行测试,测试代码不会被打包或者部署。
  • prepare-package
  • package:接受编译好的代码,打包成可发布的格式,如JAR。
  • pre-integration-test
  • integration-test
  • post-integration-test
  • verify
  • install:将安装包安装到Maven仓库,供本地其他的Maven项目使用。
  • deploy:将最终的包复制到远程仓库,供其他开发人员和Maven项目使用。

上面未标明的可以参阅官方的解释:http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html

site生命周期

site生命周期的目的是建立和发布项目站点,Maven能够基于POM所包含的信息,自动的生成一个友好的站点,方便团队交流和发布项目信息。该生命周期包含阶段如下:

  • pre-site:执行一些在生成项目站点之前需要完成的工作。
  • site:生成项目站点文档。
  • post-site:执行一些在生成项目站点之后需要完成的工作。
  • site-deploy:将生成的项目站点发布到服务器上。

内容主要来源:

       https://www.yiibai.com/maven/

        https://www.cnblogs.com/wangwei-beijing/p/6535081.html

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值