问题
在Maven工件的JAR中,我们注意到project.version属性包含在两个文件中。
meta-INF/maven/$ { groupid }/$ { artifact id }/POM.properties
meta-INF/maven/$ { groupid }/$ { artifact id }/POM.XML
有建议在运行时装入此版本的方法吗?
#1人气回答(226赞词) ) ) ) ) ) ) ) 0
您不需要访问特定于Maven的文件来获取特定库/类的版本信息。
若要检索存储在. jar-filesMANIFEST.MF中的版本信息,请使用getClass ().getPackage ().getImplementationVersion ) )。 幸运的是,Maven足够聪明,但默认情况下,Maven也没有向清单中写入正确的信息!
相反,必须将maven-jar-plugin的414145828组件更改为setaddefaultimplementationentries和addefaultspecificationentriestotrue,如下所示
org.apache.maven.plugins
maven-jar-plugin
真的
真的
理想情况下,此配置必须位于公司POM或其他基础上。
#2人气回答(65赞词) ) ) ) ) ) ) ) ) )。
为了跟进上述答复,我们发现对于a.warartifact,必须将等效配置应用于444149585,而不是31414670 :
maven-war-plugin
2.1
真的
真的
这会将版本信息添加到. war的WEB-INF/lib中包含的项目的. jar中
#3人气回答(22赞不绝口) () ) ) ) ) ) ) )0)
这是一种从pom.properties检索版本的方法,后退到从列表中检索它
publicsynchronizedstringgetversion (
字符串版本=null;
//trytoloadfrommavenpropertiesfirst
try {
属性p=new properties (;
inputstream is=getclass ((.getresourceasstream ) )/meta-INF/maven/com.my.group/my-artefact/POM.propert
if(is!=空) {
p.load(is;
version=p.getproperty('version ','');
}
}catch(exceptione ) {
//ignore
}
//fallback to using Java API
if (版本==null ) {
Package aPackage=getClass ().getPackage );
if(apackage!=空) {
version=a package.getimplementationversion (;
if (版本==null ) {
version=a package.getspecificationversion (;
}
}
}
if (版本==null ) {
//wecouldnotcomputetheversionsouseablank
版本=' ';
}
返回版本;
}