在运行时访问工件的Maven和SCM版本
您可以轻松地告诉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存档器文档
翻译自: https://www.javacodegeeks.com/2013/05/accessing-an-artifacts-maven-and-scm-versions-at-runtime.html
在运行时访问工件的Maven和SCM版本相关推荐
- scm maven_在运行时访问工件的Maven和SCM版本
scm maven 您可以轻松地告诉Maven在JAR清单文件中包含工件的版本及其Git / SVN /-修订版,然后在运行时通过getClass().getPackage访问该信息. getImpl ...
- eclipse配置tomcat运行时访问路径不要项目名称
1:双击打开tomcat 2:选择Modules,选择你要修改的项目 3:点击Edit,把path修改成空或者你自己想要的路径即可!
- unity保存运行时的操作_Unity运行时保存prefab的方法一则
unity编辑器在运行状态时,prefab的apply按钮就消失了,其实此时代码访问的话是有效的. 代码如下,将会给transform的右键增加一个save prefab的选项. using Unit ...
- Java 进阶巩固:什么是注解以及运行时注解的使用
这篇文章 2016年12月13日星期二 就写完了,当时想着等写完另外一篇关于自定义注解的一起发.结果没想到这一等就是半年多 - -. 有时候的确是这样啊,总想着等条件更好了再干,等准备完全了再开始,结 ...
- linux编译动态库未定义,linux 编译动态链接库 so,避免运行时才发现函数未 ......
ldd 查看 elf文件依赖的 so 动态链接库 可以 export LD_LIBRARY_PATH=/path 设置 so文件的路径, nm -u *.so 或者 nm |grep U ...
- Android RuntimePermissions运行时权限:单个运行时权限申请简例
Android RuntimePermissions运行时权限:单个运行时权限申请简例 Android运行时权限申请的框架结构和步骤比较简单和固定,一般现状代码启动后检查当前的Android SDK版 ...
- maven java版本过低_maven项目编译运行时提示jdk版本过低问题解决方法
明明使用的是1.8jdk,但是运行项目时提示使用的是java版本是1.5,版本过低. 修改pom.xml,添加如下: maven-compiler-plugin 3.6.1 1.8 1.8 UTF-8 ...
- JVM运行时结构、Java内存管理、JVM实例、HotSpot VM对象的创建、内存布局和访问定位
1.JVM运行时结构 Java 运行时数据区域有程序计数器.Java虚拟机栈.本地方法栈.Java堆和方法区.其中前三个线程私有,随线程生而生,线程灭而灭:后面两个是线程间共享. 1.1 程序计数器 ...
- maven 打包部署时访问远程仓库中没有的jar
maven 打包部署时访问远程仓库中没有的jar maven构建项目 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页.如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文 ...
最新文章
- Linux下安装二进制版mysql-8.0.15
- Win10电脑开机界面设置个性签名?
- 你不能忽视的HTML语言3
- mysql 如何将一个库的一个表的数据复制到另一个库中的一个表
- javascript日期比较
- android弹出窗口的实现(PopupWindow)
- 关于ubuntu中的inittab文件
- 基于.NET SingalR,LayIM2.0实现的web聊天室
- JAXB和未映射的属性
- spss 22 0统计分析从入门到精通_「转需」20+统计分析软件使用工具包,一次全搞定...
- 企业文件存储服务器规划,企业文件存储服务器
- RealWave Surfaces 泡沫
- (转) RabbitMQ学习之远程过程调用(RPC)(java)
- python抽签代码_Python(抽签问题),python实例,
- 计算机三级标题,计算机三级考试题目
- Flutter进阶第10篇: 本地存储,封装本地存储类,实现最简单的状态管理
- Atitit 输入法原理与概论ati use
- 视频压缩神器--小丸工具箱--小丸工具箱入门操作教程
- 【愚公系列】2022年09月 微信小程序-电商项目-UI框架的选型
- 轻松调整C盘分区大小
热门文章
- hbase 单机连接hadoop_Hadoop、Hbase单机环境安装
- wordcloud python3.7_[原创]win7/64位系统+python3.7.2下安装wordcloud库失败之解决——一个莫名其妙的方法...
- 纯注解开发配置spring
- 小程序真机测试错误代码_测试不充分:知道您的代码是否真的可以投入生产的5种方法...
- 代码大全和新月神话_神话般的代码
- 网络研讨室_免费网络研讨会:Java应用程序中的吞咽异常
- 渴望 英语_渴望订阅– RxJava常见问题解答
- 同步代码和异步代码_告别异步代码
- 声明式编程与函数式编程_实用程序类与函数式编程无关
- gradle的二进制版本_Gradle入门:创建二进制分发