本文共 3472 字,大约阅读时间需要 11 分钟。
《maven实战》一书内容很多,整个maven要学的东西也很多,不过,结合个人实际情况,我打算把这一篇作为这次对maven学习的一个阶段性收尾,待其他更急需补充的知识有一定眉目了,再回过头来继续深入。
对于maven版本管理,最重要的是需要区分出快照版本SNAPSHOT和发布版本release,据目前的了解,快照版本格式是固定的,而发布版本有几种,例如带release单词的和不带release单词的。
快照版本由于每次发布都带时间戳,所以适用于开发阶段团队协作,但同时也是不稳定的。发布版本就需要是比较稳定的版本,定了就不能变,如果要变就要发布新的发布版本。不过,要更好的了解maven版本管理,必须先比较熟悉版本控制,结合实际情况,就是需要先比较熟悉svn版本控制。由于目前我虽然天天在用svn,却还没有系统的学一下,所以对svn也还不是太熟,再加上目前实际工作对maven版本管理似乎也没有什么需求,因此maven版本管理这一块就先只做了解。根据我的理解,maven灵活构建指的是经过一定的配置后,可以使maven在不同的场景很容易的改变一些构建细节,例如某些属性实际值的使用。
maven提供了属性properties、profiles、资源过滤三个特性来实现。这个说白了就相当于配置的一个变量,里边的标签名就是变量名,只不过有一些标签是maven默认的,或者说约定了的,同时也能自定义并使用,例如我在某个项目的pom.xml中这样配置:
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version><spring.version>4.0.9</spring.version><auth.name>tzx</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数据库相关的属性: <sonar.jdbc.url> jdbc:mysql://localhost:3306/sonar </sonar.jdbc.url> <sonar.jdbc.driver>com.mysql.jdbc.Driver</sonar.jdbc.driver> <sonar.jdbc.username>sonar</sonar.jdbc.username> <sonar.jdbc.password>sonar</sonar.jdbc.password> <sonar.host.url>http://localhost:9000</sonar.host.url>
</properties>
除开上边两个之外,maven还能用maven内置属性、环境变量、系统变量等等,可以用mvn help:system
命令来查看有哪些环境变量和系统变量,至于具体的内置属性有哪些,可以需要时网上查询一下。 在说这个之前,先来看一个在前几篇记录中,讲maven仓库时有在settings.xml中出现过的一个配置:
<id>nexus</id> <repositories> <repository> <id>repo1</id> <url>http://192.168.0.224:8081/nexus/content/groups/public</url> <releases> <enabled>true</enabled> <updatePolicy>daily</updatePolicy> <checksumPolicy>ignore</checksumPolicy> </releases> </repository> <repository> <id>repo2</id> <url>http://192.168.0.224:8081/nexus/content/groups/public-snapshots</url> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>repo3</id> <url>http://192.168.0.65:8082/nexus/content/groups/public</url> <releases> <enabled>true</enabled> </releases> </pluginRepository> <pluginRepository> <id>repo4</id> <url>http://192.168.0.65:8082/nexus/content/groups/public-snapshots</url> <snapshots> <enabled>true</enabled> </snapshots> </pluginRepository> </pluginRepositories>
</profile>
</profiles> 很显然,这就是一个这里要说的profiles的配置,这种配置的基本形式是,在一个profiles
中可以配置多个 profile
, profile
里就是具体的配置信息,据我理解,几乎所有能在profile之外配置的信息都可以放到这里边配置。 在这个配置中,最重要的是 id
属性,这是每个 profile
的唯一标示。 之后可以使用很多种方法来激活这个配置,例如可以在settings.xml文件的 profiles
标签之外增加这样的配置: <activeProfile>nexus</activeProfile>
</activeProfiles>
然后,上边所配置的profile就被激活,可以被使用了。 除了上边这种激活方式,还可以通过‘命令行激活’、‘环境变量激活’、‘文件是否存在激活’等各种激活方式,不过目前我还完全没有用过这些方式,就暂时认为不常用,稍作了解就好。 那么除开上述的所有激活方式外,还有一种就是在profile内部配置激活:<activeByDefault>true</activeByDefault>
</activation>
这种配置的意思,从字面意思其实就可以理解,那就是默认激活。不过需要注意的是,假如有用上述任何一种方式激活过某个profile,那么所有这种默认激活的方式都会失效。这个目前感觉也似乎不怎么常用,因此暂时只需要知道有这么回事就好。
转载地址:http://ullzl.baihongyu.com/