zl程序教程

您现在的位置是:首页 >  Java

当前栏目

【Maven项目】在项目开发中对于NAPSHOT、Maven依赖关系管理以及三个标准生命周期

2023-02-18 16:47:31 时间

NAPSHOT

大型软件应用程序通常包含多个模块,常见的场景是多个团队开发同一应用程序的不同模块。例如,假设一个团队开发应用程序的前端,项目是app-ui(app-ui.jar:1.0),而另一个团队则开发应用程序后端,项目是数据服务(data-service.jar:1.0)。 现在可能发生的情况是,开发数据服务的团队正在进行快速的bug修复或项目改进,他们几乎每隔一天就会将库发布到远程仓库。现在,如果数据服务团队每隔一天上传一个新版本,就会出现以下问题:

 <modelVersion>4.0.0</modelVersion>
   <groupId>app-ui</groupId>
   <artifactId>app-ui</artifactId>
   <version>1.0</version>
   <packaging>jar</packaging>
   <name>health</name>
   <url>http://maven.apache.org</url>
   <properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
   </properties>
   <dependencies>
      <dependency>
      <groupId>data-service</groupId>
         <artifactId>data-service</artifactId>
         <version>1.0-SNAPSHOT</version>
         <scope>test</scope>
      </dependency>
  </dependencies>

数据服务团队应在每次发布更新代码时通知应用程序ui团队。 app ui团队需要定期将pom.xml文件更新到最新版本。 为了解决这个问题,快照的概念非常有用。 什么是快照? 快照是指定当前开发进度副本的特殊版本。与常规版本不同,Maven每次构建时都会检查远程存储库中的新快照。现在,数据服务团队每次都会将更新的代码快照发布到仓库,例如,dataservice:1.0-snapshot,以替换旧的快照jar包。 项目快照与版本

C:\MVN\app-ui>mvn clean package -U

对于该版本,如果Maven以前下载过指定的版本文件,例如data-service:1.0,Maven将不再从仓库下载新的1.0文件。要下载更新的代码,数据服务版本需要升级到1.1。 在快照的情况下,每次应用ui团队构建项目时,Maven都会自动获取最新的快照(数据服务:1.0-snapshot)。

Maven依赖关系管理

Maven的一个核心特性是依赖关系管理。当我们处理多模块项目(包括数百或数千个模块或子项目)时,模块之间的依赖关系变得非常复杂,管理变得困难。对于这种情况,Maven提供了一种高度控制方法。 传递相关性发现 例如,一个非常常见的情况是,A依赖于其他库B。如果另一个项目C想要使用A,那么项目C也需要使用库B。 Maven可以避免搜索所有必需的库。Maven通过读取项目文件(pom.xml)来查找项目之间的依赖关系。

<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>

我们需要做的就是在每个项目的pom中定义直接依赖关系。Maven将在其他方面帮助我们。 所有包含的库的图形将通过传递性依赖关系快速增长。当存在重复的数据库时,可能的情况将继续增加。Maven提供了一些函数来控制传递依赖的程度。

定义阶段

插件是使用plugins元素在pom.xml中定义的。 每个插件可以有多个目标。 可以定义阶段,插件将使用其阶段元素开始处理。我们使用了清洁阶段。 可以通过绑定到插件的目标来配置要执行的任务。我们已经将echo任务绑定到maven antrun插件的运行目标。 就这样。Maven将处理剩下的问题。它将下载本地存储库中不可用的插件并开始处理。

<plugins>
   <plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-antrun-plugin</artifactId>
   <version>1.1</version>
   <executions>
      <execution>
         <id>id.clean</id>
         <phase>clean</phase>
         <goals>
            <goal>run</goal>
         </goals>
         <configuration>
            <tasks>
               <echo>clean phase</echo>
            </tasks>
         </configuration>
      </execution>     
   </executions>
   </plugin>
</plugins>

我们在示例中广泛使用了maven antrun插件来将数据输出到控制台。请查看Maven-BuildProfile部分。让我们更好地理解这一部分,并在C:MVN项目目录中创建一个pom.xml文件。

<code>mvn compiler:compile</code>

安装Maven后,不会创建Maven的本地存储库。它是在第一次执行Maven命令时创建的。 在运行Maven时,Maven所需的任何组件都直接从本地仓库获得。如果本地仓库没有,它将首先尝试将组件从远程仓库下载到本地仓库,然后使用本地仓库中的组件。 默认情况下,无论是Linux还是Windows,每个用户都有一个名为的仓库目录。m2/repository/位于自己的用户目录下。 Maven本地仓库由default_ HOME%目录在%USER中创建。要修改默认位置,请在%M2_另一个路径在HOME%conf目录中Maven的settings.xml文件中定义。

三个标准生命周期

Maven有以下三个标准生命周期: 清洁:项目清洁 默认(或生成):处理项目部署 站点:处理项目站点文档创建 每个生命周期包含一系列阶段。这些阶段相当于Maven提供的统一接口,这些阶段的实现由Maven插件完成。 当我们输入mvn命令(如mvn clean)时,clean对应于clean生命周期中的clean阶段。然而,clean的具体操作由maven clean插件实现。 因此,Maven生命周期每个阶段的具体实现是由Maven插件实现的。 Maven实际上是一个依赖插件执行的框架,每个任务实际上都是由插件完成的。Maven插件通常用于: 创建jar文件 创建战争文件 编译代码文件 代码单元测试 创建项目文档 创建项目报告 插件通常提供目标集合,可以使用以下语法执行:

      <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> 

插件是使用plugins元素在pom.xml中定义的。 每个插件可以有多个目标。 可以定义阶段,插件将使用其阶段元素开始处理。我们使用了清洁阶段。 可以通过绑定到插件的目标来配置要执行的任务。我们已经将echo任务绑定到maven antrun插件的运行目标。 就这样。Maven将处理剩下的问题。它将下载本地存储库中不可用的插件并开始处理。