Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将pom中表示版本的EL函数转换为properties标记中维护的实际值_Java_Maven_Pom.xml_El - Fatal编程技术网

Java 将pom中表示版本的EL函数转换为properties标记中维护的实际值

Java 将pom中表示版本的EL函数转换为properties标记中维护的实际值,java,maven,pom.xml,el,Java,Maven,Pom.xml,El,当在标记中维护工件的版本时,使用xpp3获取工件的版本时,我遇到了一个问题。 我使用org.apache.maven.model.io.xpp3.MavenXpp3Reader获取模型,然后获取属性 MavenXpp3Reader pomReader = new MavenXpp3Reader(); FileReader fileReader = new FileReader(pom); model = pomReader.read(fileReader); //e.g. ${rsfutil.

当在标记中维护工件的版本时,使用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);
MavenXpp3Reader pomReader=新的MavenXpp3Reader();
FileReader FileReader=新的FileReader(pom);
model=pomReader.read(fileReader);
//e、 g.${rsfutil.version}-sakai{sakairsf.sakai.version}
String version=pomModel.getVersion();
Properties=pomModel.getProperties();
枚举=properties.propertyNames();
列表=新的ArrayList();
while(枚举.hasMoreElements()){
对象o=枚举.nextElement();
列表。添加((字符串)o);
}
用于(字符串:列表){
if(version.contains(字符串)){
String property=properties.getProperty(字符串);
version=version.replace(Pattern.quote(“${”+字符串+“}”),属性);
}
}
System.out.println(版本);
即使正则表达式匹配,替换方法仍然不起作用

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>
...
SakaiRSFComponents演进器
uk.org.pound.pure-poms
标准酒井工具
聚甲醛-4
Sakai RSF组件演进器
uk.org.pound.sakarsf
2.2.x
0.7.4
1.2.4
1.2.4
[2.2.0,2.7.0)
${rsfutil.version}-酒井${sakairsf.sakai.version}
...
我只想得到实际的版本
0.7.4-sakai_2.2.x
,而不是
${rsfutil.version}-sakai_${sakairsf.sakai.version}


谢谢!

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

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