《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资源过滤

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

目录
相关文章
|
9天前
|
JavaScript Java Maven
云效产品使用常见问题之android sdk 构建出aar后,上传到私有maven仓库失败如何解决
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
2月前
|
Java Maven
手把手教你搭建Maven项目
手把手教你搭建Maven项目
31 0
|
3月前
|
Java Maven
java修改当前项目的maven仓库地址为国内
修改当前项目的maven仓库地址为国内
|
4月前
|
Dubbo Java 应用服务中间件
微服务框架(十)Maven Archetype制作Dubbo项目原型
  此系列文章将会描述Java框架Spring Boot、服务治理框架Dubbo、应用容器引擎Docker,及使用Spring Boot集成Dubbo、Mybatis等开源框架,其中穿插着Spring Boot中日志切面等技术的实现,然后通过gitlab-CI以持续集成为Docker镜像。   本文为Maven Archetype的制作及使用,使用archetype插件制作Dubbo项目原型
|
2月前
|
XML Java Shell
【深入浅出Maven开发实战】「入门教程系列」带你零基础学习和开发使用Maven开发工具实战指南(实战技术总结)(一)
【深入浅出Maven开发实战】「入门教程系列」带你零基础学习和开发使用Maven开发工具实战指南(实战技术总结)
81 1
|
2月前
|
XML Java Maven
【深入浅出Maven开发实战】「入门教程系列」带你零基础学习和开发使用Maven开发工具实战指南(实战技术总结)(二)
【深入浅出Maven开发实战】「入门教程系列」带你零基础学习和开发使用Maven开发工具实战指南(实战技术总结)
51 0
|
2月前
|
Java Maven 开发工具
maven导入项目出现Unable to import maven project: See logs for details
maven导入项目出现Unable to import maven project: See logs for details
11 0
maven导入项目出现Unable to import maven project: See logs for details
|
1天前
|
Java 测试技术 Maven
Maven 构建生命周期
Maven的构建生命周期包括验证、编译、测试、打包、检查、安装和部署等阶段,用于项目构建与发布。它有三个标准生命周期:Clean(清除目标目录)、Default(验证、编译、测试、打包、验证质量、安装和部署)和Site(生成项目文档和站点)。每个阶段由插件目标组成,如clean、package和dependency:copy-dependencies,这些目标可以绑定到特定阶段或独立执行。命令行中,阶段和目标的执行顺序按照出现的顺序进行。
|
21天前
|
Java Maven Spring
【IntelliJ IDEA】使用Maven方式构建Spring Boot Web 项目(超详细)2
【IntelliJ IDEA】使用Maven方式构建Spring Boot Web 项目(超详细)
18 2
|
21天前
|
Java Maven 开发工具
【IntelliJ IDEA】使用Maven方式构建Spring Boot Web 项目(超详细)1
【IntelliJ IDEA】使用Maven方式构建Spring Boot Web 项目(超详细)
21 2

热门文章

最新文章