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

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

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

相关文章
|
1天前
|
Java Maven
maven打瘦包,且只打入部分想打入的依赖瘦包
maven打瘦包,且只打入部分想打入的依赖瘦包 设计 工程结构分析 环境管理 城市资源 安全工程 工程管理
24 10
|
23天前
|
Java 关系型数据库 MySQL
Maven——创建 Spring Boot项目
Maven 是一个项目管理工具,通过配置 `pom.xml` 文件自动获取所需的 jar 包,简化了项目的构建和管理过程。其核心功能包括项目构建和依赖管理,支持创建、编译、测试、打包和发布项目。Maven 仓库分为本地仓库和远程仓库,远程仓库包括中央仓库、私服和其他公共库。此外,文档还介绍了如何创建第一个 SpringBoot 项目并实现简单的 HTTP 请求响应。
100 1
Maven——创建 Spring Boot项目
|
26天前
|
Java 关系型数据库 MySQL
如何使用 maven 创建一个 Spring Boot项目
Maven 是一个强大的项目管理工具,通过配置 `pom.xml` 文件自动获取所需的 jar 包,提高开发效率。其核心功能包括项目构建和依赖管理。项目构建支持编译、测试、打包和发布等流程,而依赖管理则通过中央仓库、本地仓库和私有服务器获取和管理项目依赖。示例中展示了如何创建第一个 SpringBoot 项目并实现简单接口。
21 1
如何使用 maven 创建一个 Spring Boot项目
|
1月前
|
Java Maven Android开发
eclipse创建maven项目
本文介绍了在Eclipse中创建Maven项目的步骤,包括打开Eclipse、选择Java项目、完成项目创建以及自动下载插件的过程。
76 2
eclipse创建maven项目
|
14天前
|
缓存 IDE Java
idea的maven项目打包时没有source下的文件
【10月更文挑战第21天】idea的maven项目打包时没有source下的文件
30 1
|
14天前
|
Java API Apache
除了 Maven,还有哪些工具可以管理项目的依赖和版本冲突
除了Maven,常用的项目依赖管理和版本冲突解决工具有Gradle、Ivy、Ant+Ivy、SBT等。这些工具各有特点,适用于不同的开发环境和需求。
|
29天前
|
Java 应用服务中间件 Maven
【终极解决方案】IDEA maven 项目修改代码不生效。
【终极解决方案】IDEA maven 项目修改代码不生效。
234 1
|
1月前
|
XML 安全 Java
【Maven】依赖管理,Maven仓库,Maven核心功能
【Maven】依赖管理,Maven仓库,Maven核心功能
442 3
|
28天前
|
Java 应用服务中间件 Maven
SpringBoot Maven 项目打包的艺术--主清单属性缺失与NoClassDefFoundError的优雅解决方案
SpringBoot Maven 项目打包的艺术--主清单属性缺失与NoClassDefFoundError的优雅解决方案
290 0
|
3月前
|
Java Maven
解决idea每次新建maven项目都需要重新配置maven的问题
解决idea每次新建maven项目都需要重新配置maven的问题
143 1