【问题标题】:Escape property in pom.xmlpom.xml 中的转义属性
【发布时间】:2011-10-13 09:00:14
【问题描述】:

我想转义 pom.xml 中的一个属性。不在资源中,我知道可以使用过滤器。例如,我尝试像这样使用 launch4j 插件:

<plugin>
<groupId>org.bluestemsoftware.open.maven.plugin</groupId>
            <artifactId>launch4j-plugin</artifactId>
                <executions>
                    <execution>
                        <id>l4j-cli</id>
                        <phase>install</phase>
                        <goals>
                            <goal>launch4j</goal>
                        </goals>
                        <configuration>
                            <headerType>console</headerType>
                            <outfile>../out.exe</outfile>
                            <dontWrapJar>true</dontWrapJar>
                            <jar>./../out.jar</jar>
                            <icon>../icon.ico</icon>
                            <chdir>.</chdir>
                            <customProcName>true</customProcName>
                            <downloadUrl>http://www.oracle.com/technetwork/java/javase/downloads/index.html</downloadUrl>
                            <classPath>
                                <mainClass>com.stack.Main</mainClass>
                                <addDependencies>true</addDependencies>
                                <jarLocation>./lib</jarLocation>
                            </classPath>
                            <jre>
                                <opts>
                                    <opt>-DconfigBasePath=${ALLUSERSPROFILE}/dir</opt>
       </opts>                          
                            </jre>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

并且 ${ALLUSERSPROFILE} 不能由 maven 解释,而是由 launch4j 生成的程序解释。 我试试:

\${ALLUSERSPROFILE}
\\${ALLUSERSPROFILE}
$${ALLUSERSPROFILE}

<properties>
   <dollar>$</dollar>
</properties>
${dollar}{ALLUSERSPROFILE}

但没有任何效果。

【问题讨论】:

  • 根据this thread$${ALLUSERSPROFILE} 应该可以工作。
  • 我看到了这个帖子,但它不起作用
  • 发布一个完整的 POM,它可以开箱即用并重现错误。
  • \u0024 为我工作

标签: java maven-2 launch4j


【解决方案1】:

$$${surefire.forkNumber} 一起为我工作。

【讨论】:

    【解决方案2】:

    当我想通过使用 pom 属性值解析键 '${log4j.dir}' 来过滤我的 log4j.properties 文件时,我添加了相同的问题 '${user.home}'.

    $${key} hack 和 ${dollar}{key} hack 都不适合我。 我终于设法对 pom 属性中的 $ char 使用 HEXA 表示法。

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

    【讨论】:

      【解决方案3】:

      从上面的线程中稍微修改的以下内容对我有用:

          <properties> 
            <dollar>$</dollar> 
            <dollar.bloop>${dollar}{bloop}</dollar.bloop> 
          </properties> 
      
      • $$ 未被 IntelliJ 识别。我真的希望编辑不要 有红色的波浪线。
      • 使用\u0024,文字反斜杠被执行,并且在任何时候都没有被替换为$。

      YMMV 我想。

      【讨论】:

      • Maven 3.6.0 都没有
      • 唯一一个使用 Maven 3.5.2 对我有用
      【解决方案4】:

      如果要在 pom.xml 中真正转义,那你就不走运了。

      上面的一些答案引用了 Surefire 插件,它使用自己的语法进行转义。那不是一回事。

      Maven 资源过滤使用自己的转义机制。那不是一回事。

      如果你只是需要打印一些东西,你可以使用zero-width-space unicode character,像这样:

      $&#8203;{somePomProperty}
      

      这将呈现为:

      $ + zero-width-space + { + somePomProperty + }
      

      并且至少看起来是正确的。

      【讨论】:

        猜你喜欢
        • 2018-04-13
        • 2013-09-05
        • 2018-04-29
        • 2018-08-04
        • 1970-01-01
        • 2021-10-23
        • 2013-03-17
        • 2023-03-06
        • 1970-01-01
        相关资源
        最近更新 更多