《maven实战》学习笔记7——maven项目版本管理和灵活构建

简介: 说明 《maven实战》一书内容很多,整个maven要学的东西也很多,不过,结合个人实际情况,我打算把这一篇作为这次对maven学习的一个阶段性收尾,待其他更急需补充的知识有一定眉目了,再回过头来继续深入。

说明

《maven实战》一书内容很多,整个maven要学的东西也很多,不过,结合个人实际情况,我打算把这一篇作为这次对maven学习的一个阶段性收尾,待其他更急需补充的知识有一定眉目了,再回过头来继续深入。

maven版本管理

对于maven版本管理,最重要的是需要区分出快照版本SNAPSHOT和发布版本release,据目前的了解,快照版本格式是固定的,而发布版本有几种,例如带release单词的和不带release单词的。
快照版本由于每次发布都带时间戳,所以适用于开发阶段团队协作,但同时也是不稳定的。
发布版本就需要是比较稳定的版本,定了就不能变,如果要变就要发布新的发布版本。
不过,要更好的了解maven版本管理,必须先比较熟悉版本控制,结合实际情况,就是需要先比较熟悉svn版本控制。
由于目前我虽然天天在用svn,却还没有系统的学一下,所以对svn也还不是太熟,再加上目前实际工作对maven版本管理似乎也没有什么需求,因此maven版本管理这一块就先只做了解。

灵活构建

根据我的理解,maven灵活构建指的是经过一定的配置后,可以使maven在不同的场景很容易的改变一些构建细节,例如某些属性实际值的使用。
maven提供了属性properties、profiles、资源过滤三个特性来实现。

属性properties

这个说白了就相当于配置的一个变量,里边的标签名就是变量名,只不过有一些标签是maven默认的,或者说约定了的,同时也能自定义并使用,例如我在某个项目的pom.xml中这样配置:


<properties>
&lt;project.build.sourceEncoding>UTF-8&lt;/project.build.sourceEncoding>
&lt;project.reporting.outputEncoding>UTF-8&lt;/project.reporting.outputEncoding>
&lt;java.version>1.8&lt;/java.version>
&lt;spring.version>4.0.9&lt;/spring.version>
&lt;auth.name>tzx&lt;/auth.name>

</properties>


在上边的例子中,前三个是maven默认的一些属性名,而spring.version、auth.name是我自己加的,有了这些配置,在这个pom.xml文件中就能用 ${auth.name}${spring.version}这样的方式获取到里边配置的值,这样大大增加可维护性以及减少重复配置。
就比如这里的spring.version,如果这个项目导入了很多个spring的jar包,那么每个依赖配置都要配置version,如果有了spring.version,那么在依赖配置的version那里就可以使用 ${spring.version},以后如果要升级spring版本,就可以只改动properties中的spring.version的值就可以了。
需要注意的是,我的这个配置是在项目的pom.xml中,但是实际上不只是能配置在这里,还能配置在maven的settings.xml中,例如我之前学习代码管理工具sonar的时候就在setting.xml中配置过mysql数据库相关的属性:

<properties>
   &lt;sonar.jdbc.url>
    jdbc:mysql://localhost:3306/sonar
   &lt;/sonar.jdbc.url>
   &lt;sonar.jdbc.driver>com.mysql.jdbc.Driver&lt;/sonar.jdbc.driver>
   &lt;sonar.jdbc.username>sonar&lt;/sonar.jdbc.username>
   &lt;sonar.jdbc.password>sonar&lt;/sonar.jdbc.password>
   &lt;sonar.host.url>http://localhost:9000&lt;/sonar.host.url>

</properties>


除开上边两个之外,maven还能用maven内置属性、环境变量、系统变量等等,可以用 mvn help:system命令来查看有哪些环境变量和系统变量,至于具体的内置属性有哪些,可以需要时网上查询一下。

maven的profiles

在说这个之前,先来看一个在前几篇记录中,讲maven仓库时有在settings.xml中出现过的一个配置:


<profiles>
<profile>
 &lt;id>nexus&lt;/id>
 &lt;repositories>
  &lt;repository>
     &lt;id>repo1&lt;/id>
     &lt;url>http://192.168.0.224:8081/nexus/content/groups/public&lt;/url>
     &lt;releases>
            &lt;enabled>true&lt;/enabled>
            &lt;updatePolicy>daily&lt;/updatePolicy>
            &lt;checksumPolicy>ignore&lt;/checksumPolicy>
     &lt;/releases>
  &lt;/repository>
  &lt;repository>
     &lt;id>repo2&lt;/id>
     &lt;url>http://192.168.0.224:8081/nexus/content/groups/public-snapshots&lt;/url>         
     &lt;snapshots>
            &lt;enabled>true&lt;/enabled>
     &lt;/snapshots>
  &lt;/repository>
 &lt;/repositories>
 &lt;pluginRepositories>
  &lt;pluginRepository>
     &lt;id>repo3&lt;/id>
     &lt;url>http://192.168.0.65:8082/nexus/content/groups/public&lt;/url>
     &lt;releases>
            &lt;enabled>true&lt;/enabled>
     &lt;/releases>
  &lt;/pluginRepository>
  &lt;pluginRepository>
     &lt;id>repo4&lt;/id>
     &lt;url>http://192.168.0.65:8082/nexus/content/groups/public-snapshots&lt;/url>
     &lt;snapshots>
            &lt;enabled>true&lt;/enabled>
     &lt;/snapshots>
  &lt;/pluginRepository>
 &lt;/pluginRepositories>

</profile>
</profiles>


很显然,这就是一个这里要说的profiles的配置,这种配置的基本形式是,在一个 profiles中可以配置多个 profileprofile里就是具体的配置信息,据我理解,几乎所有能在profile之外配置的信息都可以放到这里边配置。
在这个配置中,最重要的是 id属性,这是每个 profile的唯一标示。
之后可以使用很多种方法来激活这个配置,例如可以在settings.xml文件的 profiles标签之外增加这样的配置:

<activeProfiles>
&lt;activeProfile>nexus&lt;/activeProfile>

</activeProfiles>


然后,上边所配置的profile就被激活,可以被使用了。
除了上边这种激活方式,还可以通过‘命令行激活’、‘环境变量激活’、‘文件是否存在激活’等各种激活方式,不过目前我还完全没有用过这些方式,就暂时认为不常用,稍作了解就好。
那么除开上述的所有激活方式外,还有一种就是在profile内部配置激活:

<activation>
  &lt;activeByDefault>true&lt;/activeByDefault>

</activation>


这种配置的意思,从字面意思其实就可以理解,那就是默认激活。不过需要注意的是,假如有用上述任何一种方式激活过某个profile,那么所有这种默认激活的方式都会失效。

web资源过滤

这个目前感觉也似乎不怎么常用,因此暂时只需要知道有这么回事就好。

目录
相关文章
|
12天前
|
Java Maven
maven项目的pom.xml文件常用标签使用介绍
第四届人文,智慧教育与服务管理国际学术会议(HWESM 2025) 2025 4th International Conference on Humanities, Wisdom Education and Service Management
64 8
|
10天前
|
Java 应用服务中间件 Maven
Maven的三种项目打包方式——pom,jar,war的区别
Maven 提供了多种打包方式,分别适用于不同类型的项目。pom 用于父项目或聚合项目,便于项目的结构和依赖管理;jar 用于Java类库或可执行的Java应用程序;war 则专用于Java Web应用程序的部署。理解这些打包方式的用途和特点,可以帮助开发者更好地配置和管理Maven项目,确保构建和部署过程的顺利进行。无论是单模块项目还是多模块项目,选择合适的打包方式对于项目的成功至关重要。
29 3
|
1月前
|
Java 关系型数据库 MySQL
Maven——创建 Spring Boot项目
Maven 是一个项目管理工具,通过配置 `pom.xml` 文件自动获取所需的 jar 包,简化了项目的构建和管理过程。其核心功能包括项目构建和依赖管理,支持创建、编译、测试、打包和发布项目。Maven 仓库分为本地仓库和远程仓库,远程仓库包括中央仓库、私服和其他公共库。此外,文档还介绍了如何创建第一个 SpringBoot 项目并实现简单的 HTTP 请求响应。
121 1
Maven——创建 Spring Boot项目
|
1月前
|
Java 关系型数据库 MySQL
如何使用 maven 创建一个 Spring Boot项目
Maven 是一个强大的项目管理工具,通过配置 `pom.xml` 文件自动获取所需的 jar 包,提高开发效率。其核心功能包括项目构建和依赖管理。项目构建支持编译、测试、打包和发布等流程,而依赖管理则通过中央仓库、本地仓库和私有服务器获取和管理项目依赖。示例中展示了如何创建第一个 SpringBoot 项目并实现简单接口。
26 1
如何使用 maven 创建一个 Spring Boot项目
|
1月前
|
Java Maven Android开发
eclipse创建maven项目
本文介绍了在Eclipse中创建Maven项目的步骤,包括打开Eclipse、选择Java项目、完成项目创建以及自动下载插件的过程。
88 2
eclipse创建maven项目
|
26天前
|
缓存 IDE Java
idea的maven项目打包时没有source下的文件
【10月更文挑战第21天】idea的maven项目打包时没有source下的文件
39 1
|
27天前
|
Java API Apache
除了 Maven,还有哪些工具可以管理项目的依赖和版本冲突
除了Maven,常用的项目依赖管理和版本冲突解决工具有Gradle、Ivy、Ant+Ivy、SBT等。这些工具各有特点,适用于不同的开发环境和需求。
|
1月前
|
Java 应用服务中间件 Maven
【终极解决方案】IDEA maven 项目修改代码不生效。
【终极解决方案】IDEA maven 项目修改代码不生效。
338 1
|
1月前
|
Java Devops 持续交付
Maven学习笔记(二):Maven基础(基于IDEA)
【10月更文挑战第1天】Maven 是一款 Java 项目构建工具,主要用于管理 jar 包及其依赖关系。上一篇简单介绍了Maven的基础知识,本文主要介绍IDEA上的实际使用场景。内容上几近全为学习《尚硅谷2022版Maven教程》整理所得。仅供参考。
173 0
Maven学习笔记(二):Maven基础(基于IDEA)
|
1月前
|
Java 应用服务中间件 Maven
SpringBoot Maven 项目打包的艺术--主清单属性缺失与NoClassDefFoundError的优雅解决方案
SpringBoot Maven 项目打包的艺术--主清单属性缺失与NoClassDefFoundError的优雅解决方案
326 0