【问题标题】:Is it possible to escape maven property interpolation when the property value string is the same as the property name?当属性值字符串与属性名称相同时,是否可以转义 maven 属性插值?
【发布时间】:2023-03-06 13:12:01
【问题描述】:

我正在尝试定义一个 Maven 属性:

<properties>
  <property>$${property}</property>
</property>

Maven 尝试扩展 ${property},我收到以下错误:

[ERROR]     Resolving expression: '${property}': Detected the
     following recursive expression cycle in 'property': [property] -> [Help 2]

我尝试了各种组合试图逃脱它,但没有成功:

$$
\$
\$$

等等等等

注意:当属性值与名称不同时,插值被转义。

这可能吗?

【问题讨论】:

  • 这是什么背景?正如您所发现的,有几种明显的方法不起作用,因此在尝试构建解决方法时了解约束会很有帮助。
  • 有点牵扯。我正在组装一个从多模块 maven 项目构建的 doc 包,使用 docbook 作为源格式。此属性位于自动生成的页脚中。对于大多数模块,此属性的值是使用 docbook 属性替换的,但我有一个公共模块,我想延迟替换该属性,因此想将其设置为 ${property}。我确实有一个(完全不同的)解决方法,但我仍然想知道这在 maven 中是否可行(如宣传的那样,并且在属性名称与值不同时有效)。

标签: maven


【解决方案1】:

由于您似乎无法构建 maven 属性(即使具有中间属性),也许您可​​以保留 2 个单独的属性并将它们连接到您需要的位置。假设您想在文件中填充一些属性。

在 POM 中定义 2 个变量:

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

在文件中定义属性时同时使用:

# variable from file which is to be filtered
whatever=${dollar}${property}

过滤后你会得到:

# variable from file which is to be filtered
whatever=${property} 


使用&amp;amp; 怎么样?一个配置如:
  <properties>
      <property>&amp;{property}</property>
  </properties>

  ...

  <plugins>
        <plugin>
            <groupId>com.soebes.maven.plugins</groupId>
            <artifactId>echo-maven-plugin</artifactId>
            <version>0.2</version>
            <executions>
                <execution>
                    <phase>initialize</phase>
                    <goals>
                        <goal>echo</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <echos>
                    <echo>property=[${property}]</echo>
                </echos>
            </configuration>
        </plugin>
  </plugins>

将输出:

[INFO] --- echo-maven-plugin:0.2:echo (default) @ XXXX ---
[INFO] property=[&{property}]

【讨论】:

  • 我不想要 & - 我想要 $。
  • 抱歉,虽然我一直在阅读$,但我绝对相信您需要&amp;(facepalm)
  • @natk 对,到目前为止,我在定义属性方面所做的所有尝试都失败了,因为它找到了循环引用。根据您需要如何使用该属性,也许您可​​以使用更新的答案作为解决方法。
  • 是的,如果我可以更改实例化属性的位置,这将起作用,但由于我在多个位置使用它,其中一些另一个值确实被替换,我无法使用您的解决方案。不过谢谢!
【解决方案2】:

&amp;#36;{property} 应该可以正常工作。

【讨论】:

  • 哈哈。那应该是 ${property},但浏览器自动为我转换为 $。
猜你喜欢
  • 1970-01-01
  • 2017-08-18
  • 1970-01-01
  • 1970-01-01
  • 2016-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多