Java库的版本信息,可在运行时访问
出于支持目的,我需要向Java库添加一个版本和构建标识符。该库本身是一个没有用户交互的工具包,用于不同的环境(独立Java应用程序、web应用程序、Eclipse应用程序、Maven依赖性等) 我想要的是一个带有一些常量的类,它为我提供了上述信息(例如Java库的版本信息,可在运行时访问,java,maven,jar,Java,Maven,Jar,出于支持目的,我需要向Java库添加一个版本和构建标识符。该库本身是一个没有用户交互的工具包,用于不同的环境(独立Java应用程序、web应用程序、Eclipse应用程序、Maven依赖性等) 我想要的是一个带有一些常量的类,它为我提供了上述信息(例如MyAppVersion.BUILD,…),以便它们可以显示在对话框、命令行输出等中。在我研究之后,似乎有以下方法: 向文件名添加版本控制,例如myLibrary-0.1.2.jar;在本例中不可行,因为部署时我无法控制文件名 将信息添加到MAN
MyAppVersion.BUILD
,…),以便它们可以显示在对话框、命令行输出等中。在我研究之后,似乎有以下方法:
- 向文件名添加版本控制,例如
;在本例中不可行,因为部署时我无法控制文件名myLibrary-0.1.2.jar
- 将信息添加到
并以编程方式读取,如所述。但是,我不确定这种方法对于不同的类加载器(Eclipse、OSGi、应用服务器等)有多强大,如果JAR文件被重新打包,这些信息就会丢失MANIFEST.MF
- 如前所述,使用保存版本的
文件,并在生成过程中使用脚本更新version.properties
文件version.properties
- 直接将版本信息硬编码到类中,并使用脚本更新此信息
还有其他方法吗?最后一个选项对我来说似乎最“稳健”,对这个变体有什么反对意见吗?是否有Maven插件支持在构建过程中更新
MyAppVersion.java
文件中的此信息?硬编码版本的最后一个选项是最健壮的,这似乎对您很重要。
如果您使用ant构建,您可以编写一个类(我们称之为VersionGenerator),该类将生成一个版本为的java文件:
package my.cool.package;
public interface Version {
String VERSION = "1.2.3";
}
从ant调用VersionGenerator
然后编译所有代码并将其放入jar中。您的jar将包含一个新生成和编译的Version.class!
VersionGenerator将具有如何命名和增加版本的逻辑我建议使用的正是为此目的而创建的 您最多只能创建一个单独的模块,其中包含这样一个模板类(或在您的模块中):
公共最终类版本{
私有静态最终字符串版本=“${project.VERSION}”;
私有静态最终字符串GROUPID=“${project.GROUPID}”;
私有静态最终字符串SVN=“${project.scm.developerConnection}”;
私有静态最终字符串SVN_BRANCH=“${scmBranch}”;
私有静态最终字符串修订版=“${buildNumber}”;
公共静态字符串getVersion(){
返回版本;
}
公共静态字符串getGroupId(){
返回GROUPID;
}
公共静态字符串getSVN(){
返回SVN;
}
公共静态字符串getRevision(){
返回修订;
}
公共静态字符串getSVNBranch(){
返回SVN_分支机构;
}
}
您只需将其放入文件夹,再加上适当的包名。此外,您可以在pom文件中配置模板maven插件,如下所示:
org.codehaus.mojo
要创建需要添加到pom文件中的buildNumber,如下所示:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<version>1.2</version>
<configuration>
<revisionOnScmFailure>UNKNOWN</revisionOnScmFailure>
<getRevisionOnlyOnce>true</getRevisionOnlyOnce>
</configuration>
<executions>
<execution>
<goals>
<goal>create</goal>
</goals>
</execution>
</executions>
</plugin>
org.codehaus.mojo
buildnumber maven插件
1.2
不为人知
真的
创造
提供了从清单中获取版本的更简洁的方法。简而言之:String version=this.getClass().getPackage().getImplementationVersion()
听起来像是使用属性文件并用maven过滤,让它插入版本号。最好使用基于maven的工具,如suggest Templateing-maven-plugin。谢谢,但我使用的是maven,khmarbaise的解决方案在我看来非常完美!太好了,看起来正是我想要的!非常感谢。