java 将pom中的EL函数表示版本转换为属性标签中维护的实际值

33qvvth1  于 2023-01-19  发布在  Java
关注(0)|答案(1)|浏览(98)

当版本在标记中维护时,我在使用xpp 3获取工件的版本时遇到了问题。我使用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);

即使正则表达式匹配,replace方法仍然不起作用。
而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}
谢谢!

4ioopgfo

4ioopgfo1#

我发现我应该使用replaceAll方法而不是replace方法。

相关问题