您可以轻松地告诉Maven在JAR清单文件中包含工件的版本及其Git / SVN /…修订版,然后在运行时通过getClass()。getPackage访问该信息。 getImplementationVersion() 。 (所有功劳归功于MarkusKrüger和其他同事。)

在清单中包括Maven工件版本

(注意:如果您还想包含SCM修订版,则实际上将不希望使用它;请参见下文。)

pom.xml:

<project>...<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId>...<configuration><archive><manifest><addDefaultImplementationEntries>true</addDefaultImplementationEntries><addDefaultSpecificationEntries>true</addDefaultSpecificationEntries></manifest></archive></configuration>...</plugin></plugins></build>...
</project>

然后,JAR文件的结果MANIFEST.MF将包括以下条目,其值来自指示的属性:

Built-By: ${user.name}
Build-Jdk: ${java.version}
Specification-Title: ${project.name}
Specification-Version: ${project.version}
Specification-Vendor: ${project.organization.name
Implementation-Title: ${project.name}
Implementation-Version: ${project.version}
Implementation-Vendor-Id: ${project.groupId}
Implementation-Vendor: ${project.organization.name}

(规范供应商和实施供应商来自POM的组织/名称。)

包括SCM修订版

为此,您可以使用生成属性$ {buildNumber}的内部版本号Maven插件 ,也可以从Jenkins或Hudson(对于Subversion为SVN_REVISION,对于Git为GIT_COMMIT) 传递的环境变量中检索它。

仅对于git,您还可以使用maven-git-commit-id-plugin ,该插件可以替换现有资源文件中的字符串,例如$ {git.commit.id}(使用maven的资源过滤,必须启用)。实际值或将它们全部输出到git.properties文件中。

让我们使用buildnumber-maven-plugin显式创建清单条目,其中包含内部版本号(即修订版)

<project><build><plugins><plugin><!-- Create the property $buildNumber holding the current Git revision --><groupId>org.codehaus.mojo</groupId><artifactId>buildnumber-maven-plugin</artifactId><version>1.2</version><executions><execution><phase>validate</phase><goals><goal>create</goal></goals></execution></executions><configuration><doCheck>false</doCheck><doUpdate>false</doUpdate></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><version>2.4</version><configuration><archive><manifestEntries><Implementation-Title>${project.name}</Implementation-Title><!-- buildNumber is produced at runtime by buildnumber-maven-plugin --><Implementation-Version>${project.version} ${buildNumber}</Implementation-Version></manifestEntries></archive></configuration></plugin>
...

访问版本和修订版

如上所述,您可以通过getClass()。getPackage.getImplementationVersion()和getClass()。getPackage.getImplementationTitle()访问代码中的清单条目。

资源资源

  • SO:如何在运行时获取Maven Artifact版本?
  • Maven存档器文档
参考: The Holy Java博客上的JCG合作伙伴 Jakub Holy可以在运行时访问工件的Maven和SCM版本 。

翻译自: https://www.javacodegeeks.com/2013/05/accessing-an-artifacts-maven-and-scm-versions-at-runtime.html

在运行时访问工件的Maven和SCM版本相关推荐

  1. scm maven_在运行时访问工件的Maven和SCM版本

    scm maven 您可以轻松地告诉Maven在JAR清单文件中包含工件的版本及其Git / SVN /-修订版,然后在运行时通过getClass().getPackage访问该信息. getImpl ...

  2. eclipse配置tomcat运行时访问路径不要项目名称

    1:双击打开tomcat 2:选择Modules,选择你要修改的项目 3:点击Edit,把path修改成空或者你自己想要的路径即可!

  3. unity保存运行时的操作_Unity运行时保存prefab的方法一则

    unity编辑器在运行状态时,prefab的apply按钮就消失了,其实此时代码访问的话是有效的. 代码如下,将会给transform的右键增加一个save prefab的选项. using Unit ...

  4. Java 进阶巩固:什么是注解以及运行时注解的使用

    这篇文章 2016年12月13日星期二 就写完了,当时想着等写完另外一篇关于自定义注解的一起发.结果没想到这一等就是半年多 - -. 有时候的确是这样啊,总想着等条件更好了再干,等准备完全了再开始,结 ...

  5. linux编译动态库未定义,linux 编译动态链接库 so,避免运行时才发现函数未 ......

    ldd  查看 elf文件依赖的  so 动态链接库 可以  export LD_LIBRARY_PATH=/path 设置 so文件的路径, nm  -u  *.so  或者 nm |grep  U ...

  6. Android RuntimePermissions运行时权限:单个运行时权限申请简例

    Android RuntimePermissions运行时权限:单个运行时权限申请简例 Android运行时权限申请的框架结构和步骤比较简单和固定,一般现状代码启动后检查当前的Android SDK版 ...

  7. maven java版本过低_maven项目编译运行时提示jdk版本过低问题解决方法

    明明使用的是1.8jdk,但是运行项目时提示使用的是java版本是1.5,版本过低. 修改pom.xml,添加如下: maven-compiler-plugin 3.6.1 1.8 1.8 UTF-8 ...

  8. JVM运行时结构、Java内存管理、JVM实例、HotSpot VM对象的创建、内存布局和访问定位

    1.JVM运行时结构 Java 运行时数据区域有程序计数器.Java虚拟机栈.本地方法栈.Java堆和方法区.其中前三个线程私有,随线程生而生,线程灭而灭:后面两个是线程间共享. 1.1 程序计数器 ...

  9. maven 打包部署时访问远程仓库中没有的jar

    maven 打包部署时访问远程仓库中没有的jar maven构建项目 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页.如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文 ...

最新文章

  1. Linux下安装二进制版mysql-8.0.15
  2. Win10电脑开机界面设置个性签名?
  3. 你不能忽视的HTML语言3
  4. mysql 如何将一个库的一个表的数据复制到另一个库中的一个表
  5. javascript日期比较
  6. android弹出窗口的实现(PopupWindow)
  7. 关于ubuntu中的inittab文件
  8. 基于.NET SingalR,LayIM2.0实现的web聊天室
  9. JAXB和未映射的属性
  10. spss 22 0统计分析从入门到精通_「转需」20+统计分析软件使用工具包,一次全搞定...
  11. 企业文件存储服务器规划,企业文件存储服务器
  12. RealWave Surfaces 泡沫
  13. (转) RabbitMQ学习之远程过程调用(RPC)(java)
  14. python抽签代码_Python(抽签问题),python实例,
  15. 计算机三级标题,计算机三级考试题目
  16. Flutter进阶第10篇: 本地存储,封装本地存储类,实现最简单的状态管理
  17. Atitit 输入法原理与概论ati use
  18. 视频压缩神器--小丸工具箱--小丸工具箱入门操作教程
  19. 【愚公系列】2022年09月 微信小程序-电商项目-UI框架的选型
  20. 轻松调整C盘分区大小

热门文章

  1. hbase 单机连接hadoop_Hadoop、Hbase单机环境安装
  2. wordcloud python3.7_[原创]win7/64位系统+python3.7.2下安装wordcloud库失败之解决——一个莫名其妙的方法...
  3. 纯注解开发配置spring
  4. 小程序真机测试错误代码_测试不充分:知道您的代码是否真的可以投入生产的5种方法...
  5. 代码大全和新月神话_神话般的代码
  6. 网络研讨室_免费网络研讨会:Java应用程序中的吞咽异常
  7. 渴望 英语_渴望订阅– RxJava常见问题解答
  8. 同步代码和异步代码_告别异步代码
  9. 声明式编程与函数式编程_实用程序类与函数式编程无关
  10. gradle的二进制版本_Gradle入门:创建二进制分发