maven 版本号插件

假设我们需要向一些工件(jar,war等)添加内部版本号。 在这里,我想演示buildnumber-maven-plugin的用法。

这篇文章基于:

  • http://mojo.codehaus.org/buildnumber-maven-plugin/usage.html
  • http://www.site.lalitbhatt.com/maven-build-number-plugin
  • http://blog.peterlynch.ca/2009/11/buildnumber-maven-plugin-helpful.html
  • http://apollo.ucalgary.ca/tlcprojectswiki/index.php/Public/Project_Versioning_-_Best_Practices#Build_Versioning

我们有一些项目,需要在jar清单文件中包含不基于VCS(SVN,Git,Mercurial等)修订版本的顺序内部版本号。 让我们创建适当的pom.xml文件,并实施小型演示以验证结果。

生成Maven项目

$ mvn archetype:generate -DgroupId=org.halyph -DartifactId=buildNoTest\
-DarchetypeArtifactId=maven-archetype-quickstart \
-DinteractiveMode=false

创建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/maven-v4_0_0.xsd"><modelversion>4.0.0</modelversion><groupid>org.halyph</groupid><artifactid>buildNoTest</artifactid><packaging>jar</packaging><version>1.0-SNAPSHOT</version><name>buildNoTest</name><url>http://maven.apache.org</url><dependencies><dependency><groupid>junit</groupid><artifactid>junit</artifactid><version>3.8.1</version><scope>test</scope></dependency></dependencies><properties><project.build.sourceencoding>UTF-8</project.build.sourceencoding></properties><!-- If you have access to scm then you can place actual url's. Otherwise with <revisionOnScmFailure /> you can give some fake URLs as follows. --><scm><connection>scm:svn:http://none</connection><developerconnection>scm:svn:https://none</developerconnection><url>scm:svn:https://none</url></scm><build><resources><resource><directory>src/main/resources</directory></resource><resource><directory>src/main/filtered-resources</directory><filtering>true</filtering></resource></resources><plugins><plugin><groupid>org.codehaus.mojo</groupid><artifactid>buildnumber-maven-plugin</artifactid><version>1.1</version><executions><execution><phase>generate-resources</phase><goals><goal>create</goal></goals></execution></executions><configuration><!-- doCheck and doUpdate actually talk to repository if it's true,Check would check that there are no local changes. Update would update it --><docheck>false</docheck><doupdate>false</doupdate><!-- This ensures that even if we are not connected to scm than alsotake the version from local .svn file --><revisiononscmfailure><!--Generate sequence build number based on:build number and timestamp      --><format>Build: #{0} ({1,date})</format><items><item>buildNumber\d*</item><item>timestamp</item></items></revisiononscmfailure></configuration></plugin><plugin><groupid>org.apache.maven.plugins</groupid><artifactid>maven-jar-plugin</artifactid><version>2.1</version><configuration><archive><!-- will put the entries into META-INF/MANIFEST.MF file --><manifestentries><implementation-version>${project.version}</implementation-version><implementation-build>${buildNumber}</implementation-build></manifestentries></archive></configuration></plugin></plugins></build>
</project>

创建演示应用程序以验证结果

package org.halyph;import java.io.IOException;
import java.util.ResourceBundle;
import java.util.jar.Attributes;
import java.util.jar.Manifest;public class App
{public static void main( String[] args ) throws IOException{System.out.println('Verify Resource bundle' );// Check filtered resources based on generated build numberResourceBundle bundle = ResourceBundle.getBundle( 'build' );String msg = bundle.getString( 'build.message' );System.out.println(msg);System.out.println('\nVerify Generated MANIFEST.MF Properties' );// Check Manifest file based on generated build numberManifest mf = new Manifest();mf.read(Thread.currentThread().getContextClassLoader().getResourceAsStream('META-INF/MANIFEST.MF'));Attributes atts = mf.getMainAttributes();System.out.println('Implementation-Versio: ' + atts.getValue('Implementation-Version'));System.out.println('Implementation-Build: ' + atts.getValue('Implementation-Build'));}
}

多次构建应用程序并运行

$ mvn install
$ java -cp target\buildNoTest-1.0-SNAPSHOT.jar org.halyph.App
Verify Resource bundle
Build: #3 (Jun 27, 2012)Verify Generated MANIFEST.MF Properties
Implementation-Versio: 1.0-SNAPSHOT
Implementation-Build: Build: #3 (Jun 27, 2012)

摘要

  1. 我们应该通过将伪造的<scm>部分添加到pom.xml中并将<revisionOnScmFailure />添加到buildnumber-maven-plugin <configuration>中,通知buildnumber-maven-plugin我们将不使用版本控制修订作为内部版本号。
  2. 已实现的自定义内部版本号格式,请参阅buildnumber-maven-plugin <配置> / <格式>和<配置> / <项目>。
  3. 在jar清单中添加了内部版本号,请参阅maven-jar-plugin pom.xml部分
  4. 测试生成的内部版本号是否可以正确添加到过滤的资源中
  • 创建的src \ main \ filtered-resources \ build.properties文件
build.message=${buildNumber}
  • 添加了资源过滤,请参见<resource>标志<filtering> true </ filtering>部分
  • 演示应用程序验证jar清单文件中的过滤资源和内部版本号
  • 您可以git clone这个项目https://github.com/halyph/blog-sandbox/tree/master/Maven/blogpost_062712

    参考: Maven内部版本号插件–我们的JCG合作伙伴 Orest Ivasiv的示例用法,来自Knowledge Is Everything博客。

翻译自: https://www.javacodegeeks.com/2012/10/maven-build-number-plugin-sample-usage.html

maven 版本号插件

maven 版本号插件_Maven内部版本号插件–用法示例相关推荐

  1. 升级maven编译插件_maven进阶插件

    父子项目都设置properties,子项目会覆盖父项目. 但是使用的jar包要覆盖全,比如logback有classic和core两个模块,之前只覆盖了classic模块,没有添加core的依赖.导致 ...

  2. java自定义maven插件_Maven自定义插件的实现

    为了快速学习自定义 Maven 插件的过程,接下来将实现一个简单的 Hello Maven 插件,功能很简单:输出 Hello World 插件.具体步骤和操作如下. 创建 Maven 新项目,选择 ...

  3. Maven内部版本号插件–用法示例

    假设我们需要向一些工件(jar,war等)添加内部版本号. 在这里,我想演示buildnumber-maven-plugin的用法. 这篇文章基于: http://mojo.codehaus.org/ ...

  4. maven 版本号插件_测试Maven版本插件自动递增版本号

    maven 版本号插件 抽象 Maven版本插件是一个非常强大的工具,我在很大程度上依赖于它来协调软件版本. 通常,软件发行版本号遵循简单的1.0.0.0-SNAPSHOT格式. 但是最近我需要在版本 ...

  5. maven学习:jetty插件与Tomcat插件

    1.jetty插件 要测试的web的pom里面,加入jetty的插件配置,示例如下: <!-- jetty插件 --> <plugin><groupId>org.m ...

  6. Apache Maven项目提供的EAR插件详解

    EAR插件主要用于生成Java EE Enterprise Archive (EAR)文件,即将各种组件打包到一起生成一个ear文件.此外,EAR插件也可以用于生成EAR的部署描述符文件applica ...

  7. Maven入门指南⑦:Maven的生命周期和插件

    Maven入门指南⑦:Maven的生命周期和插件 一个完整的项目构建过程通常包括清理.编译.测试.打包.集成测试.验证.部署等步骤,Maven从中抽取了一套完善的.易扩展的生命周期.Maven的生命周 ...

  8. Maven 配置文件 POM 的常用插件配置代码

    Maven 配置文件 POM 的常用插件配置代码 普通 将 Maven 多模块依赖集成打进一个 JAR 包(方法 1) 将 Maven 多模块依赖集成打进一个 JAR 包(方法 2) 生成单入口类 J ...

  9. maven(7)生命周期和插件

    [0]README 1)本文部分文字转自 "maven实战",旨在 review  "maven(7)生命周期和插件" 的相关知识: 2)maven 另外两个核 ...

最新文章

  1. java配置常量_Java构建时间常量配置
  2. gridview的buttonfield获取该行的索引值(实例讲解)
  3. nginx功能扩展整理
  4. 【java8中的时间操作】java8中获取月的最后一天或者总天数,JDK8 LocalDate AP
  5. apk 签名v1与v2的区别
  6. 单页面 Web 应用(Single Page Application,SPA)的工作原理介绍
  7. 关于com.android.support:appcompat-v7:26.0.0以上无法下载的问题
  8. HDU 4417 Super Mario(莫队 + 树状数组 + 离散化)
  9. Codeforces Gym101518H:No Smoking, Please(最小割)
  10. mysql show的用法
  11. 360度全面抵御黑客攻击的新型芯片来了!
  12. c语言实现 网络嗅探程序代码,一个简易网络嗅探器的实现源代码.doc
  13. 深度学习自学(三十三):通过结构正则化深度聚类解决无监督域自适应问题
  14. android光标属性设置,光标设置、hint设置
  15. linux配置环境变量宏,在linux中配置环境变量(示例代码)
  16. qsnctf 2048 wp
  17. 脚本自动化互相阅读文章教程
  18. QQ浏览器该站点长时间无响应_消除CNZZ.站长统计代码被Chrome浏览器警告的操作...
  19. 数据分析进阶 - 评分模型权重计算方法
  20. TCP/IP的安全缺陷

热门文章

  1. 在gitee上创建自己的仓库步骤
  2. Mybatis中使用Dao实现类实现增删改查【实际开发中使用代理dao】
  3. github创建一个新的tag
  4. 3-1 Apache Shiro权限管理框架介绍
  5. tomcat(18)部署器
  6. MarkdownPad 汉化破解(含下载地址)
  7. java使用:: 表达式_Java 12:开关表达式
  8. apache ignite_通过示例获取Apache Ignite Baseline拓扑
  9. tls 使用java生成_同时使用传入和传出连接时,相互TLS身份验证存在Java问题
  10. jboss 配置上下文路径_为单个Web应用程序配置多个上下文根– JBoss