首页 > 编程知识 正文

maven依赖不写版本号,java比较版本号

时间:2023-05-04 01:52:19 阅读:130675 作者:832

问题

在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

版本=' ';

}

返回版本;

}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。