我在使用xpp3获取工件的版本时遇到了一个问题,因为版本是在标签中维护的。我使用了 org.apache.maven.model.io.xpp3.MavenXpp3Reader
得到模型,然后得到属性
MavenXpp3Reader pomReader = new MavenXpp3Reader();
FileReader fileReader = new FileReader(pom);
model = pomReader.read(fileReader);
//e.g. ${rsfutil.version}-sakai_${sakairsf.sakai.version}
String version = pomModel.getVersion();
Properties properties = pomModel.getProperties();
Enumeration<?> enumeration = properties.propertyNames();
List<String> list = new ArrayList<>();
while (enumeration.hasMoreElements()){
Object o = enumeration.nextElement();
list.add((String)o);
}
for (String string : list) {
if (version.contains(string)){
String property = properties.getProperty(string);
version = version.replace(Pattern.quote("${"+string+"}"), property);
}
}
System.out.println(version);
即使regex匹配了,替换法还是不行。
而pom是这样的。
<artifactId>SakaiRSFComponents-evolvers</artifactId>
<parent>
<groupId>uk.org.ponder.pure-poms</groupId>
<artifactId>standard-sakai-tool</artifactId>
<version>POM-4</version>
</parent>
<name>Sakai RSF Components Evolvers</name>
<groupId>uk.org.ponder.sakairsf</groupId>
<properties>
<sakairsf.sakai.version>2.2.x</sakairsf.sakai.version>
<rsfutil.version>0.7.4</rsfutil.version>
<ponderutilcore.version>1.2.4</ponderutilcore.version>
<jservletutil.version>1.2.4</jservletutil.version>
<sakai.version>[2.2.0,2.7.0)</sakai.version>
</properties>
<version>${rsfutil.version}-sakai_${sakairsf.sakai.version}</version>
...
我所要做的就是得到实际的版本。0.7.4-sakai_2.2.x
而不是 ${rsfutil.version}-sakai_${sakairsf.sakai.version}
.
谢谢!
很抱歉问了这么傻的问题。我发现我应该使用replaceAll方法而不是replace方法。