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

问题描述 投票:1回答:1

我在使用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} .

谢谢!

java maven pom.xml el
1个回答
0
投票

很抱歉问了这么傻的问题。我发现我应该使用replaceAll方法而不是replace方法。

© www.soinside.com 2019 - 2024. All rights reserved.