Maven - pom中属性名称中的特殊字符

时间:2011-12-14 10:37:48

标签: maven properties escaping maven-plugin pom.xml

我正在使用maven-properties-plugin将我的属性写入文件,以供第三方应用程序使用。

我想在属性名称中包含一个特殊字符'$'。

例如:

<properties>
 <a$Boolean>SOMETHING</a$Boolean>
...

我找不到逃脱角色。

我很感激解决方案。

谢谢, 伊卡。

3 个答案:

答案 0 :(得分:2)

$是$的转义字符。

只需两次,例如

<properties>
  <prop-with-dollar>Prop-with-$$</prop-with-dollar>
</properties>

prop-with-dollar的值为Prop-with-$

修改

仔细阅读后,意识到问题实际上是关于属性名称中的$

Maven不支持。这不是不合理的。许多语言仅支持变量名称的有限字符集。例如,在Java $!<>-中,许多其他字符不能出现在变量名中。

答案 1 :(得分:1)

可以为你工作,值得尝试:

<project>
    <properties>
         <a\u0024Boolean>SOMETHING</a\u0024Boolean>
    </properties>
    <!--...-->
</project>

我希望通过使用pom属性值<解析密钥'$ {log4j.dir}'来过滤我的 log4j.properties 文件时添加相同的问题强> '$ {的user.home}'即可。

$$ {key} hack和$ {dollar} {key} hack都没有为我工作。 我终于设法使用HEXA表示法为pom属性中的$ char。

<project>
    <properties>
    <log4j.dir>\u0024{user.home}</log4j.dir>
    </properties>
    <!--...-->
</project>
祝你好运!

答案 2 :(得分:0)

我最终做的是使用maven replacer plugin在每个我需要美元符号的地方写'DOLAR',然后用'$'替换'DOLAR的所有实例' 这是一个代码示例:

<plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>properties-maven-plugin</artifactId>
        <version>1.0-alpha-2</version>
        <executions>
          <execution>
            <id>Generating varfile for the install4j</id>
            <phase>generate-resources</phase>
            <goals>
              <goal>write-active-profile-properties</goal>
            </goals>
            <configuration>
              <outputFile>C:\Dev\out.varfile</outputFile>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>com.google.code.maven-replacer-plugin</groupId>
        <artifactId>maven-replacer-plugin</artifactId>
        <version>1.4.0</version>
        <executions>
          <execution>
            <id>Replacing the DOLAR sign with real dollar sign in varfile</id>
            <phase>process-resources</phase>
            <goals>
              <goal>replace</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <basedir>C:\Dev\</basedir>
          <file>out.varfile</file>
          <replacements>
            <replacement>
              <token>DOLAR</token>
              <value>\$$</value>
            </replacement>
          </replacements>
        </configuration>
      </plugin>