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

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

目录
相关文章
|
28天前
|
Java Maven
手把手教你搭建Maven项目
手把手教你搭建Maven项目
28 0
|
2月前
|
Java Maven
java修改当前项目的maven仓库地址为国内
修改当前项目的maven仓库地址为国内
|
3月前
|
Dubbo Java 应用服务中间件
微服务框架(十)Maven Archetype制作Dubbo项目原型
  此系列文章将会描述Java框架Spring Boot、服务治理框架Dubbo、应用容器引擎Docker,及使用Spring Boot集成Dubbo、Mybatis等开源框架,其中穿插着Spring Boot中日志切面等技术的实现,然后通过gitlab-CI以持续集成为Docker镜像。   本文为Maven Archetype的制作及使用,使用archetype插件制作Dubbo项目原型
|
3月前
|
前端开发 Java Maven
IEAD MAVEN创建springboot 项目
IEAD MAVEN创建springboot 项目
27 0
|
20天前
|
XML Java Shell
【深入浅出Maven开发实战】「入门教程系列」带你零基础学习和开发使用Maven开发工具实战指南(实战技术总结)(一)
【深入浅出Maven开发实战】「入门教程系列」带你零基础学习和开发使用Maven开发工具实战指南(实战技术总结)
63 1
|
3月前
|
Java API Maven
JFinal5+Jetty2009+IDEA2020+Java8的非Maven-Demo项目
JFinal5+Jetty2009+IDEA2020+Java8的非Maven-Demo项目
22 1
|
21天前
|
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
|
21天前
|
Java Maven
运行maven项目出现Error:java: JDK isn‘t specified for module ‘XXX‘
运行maven项目出现Error:java: JDK isn‘t specified for module ‘XXX‘
11 0
|
28天前
|
JavaScript Java 关系型数据库
实例!使用Idea创建SSM框架的Maven项目
实例!使用Idea创建SSM框架的Maven项目
30 0
|
2月前
|
Java Maven
Maven项目模块打包引入
Maven项目模块打包引入
25 0