前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Maven项目】在项目开发中对于NAPSHOT、Maven依赖关系管理以及三个标准生命周期

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

作者头像
上进小菜猪
发布2022-12-29 14:06:40
7730
发布2022-12-29 14:06:40
举报
文章被收录于专栏:我想境境的开发专栏

NAPSHOT

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

代码语言:javascript
复制
 <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包。 项目快照与版本

代码语言:javascript
复制
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)来查找项目之间的依赖关系。

代码语言:javascript
复制
<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将处理剩下的问题。它将下载本地存储库中不可用的插件并开始处理。

代码语言:javascript
复制
<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文件。

代码语言:javascript
复制
<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文件 创建战争文件 编译代码文件 代码单元测试 创建项目文档 创建项目报告 插件通常提供目标集合,可以使用以下语法执行:

代码语言:javascript
复制
      <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将处理剩下的问题。它将下载本地存储库中不可用的插件并开始处理。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-12-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • NAPSHOT
  • Maven依赖关系管理
  • 定义阶段
  • 三个标准生命周期
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档