- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在处理一个 Maven 脚本,我必须修改一些文件内容。我目前正在使用替换插件,当替换值包含美元符号时,这会给我带来麻烦。
我遇到问题的替换相对简单:在我的 log4j.xml 中,替换行 <param name="File" value="wat.log" />
与 <param name="File" value="${FOO_BAR}/wat.log" />
我知道,这样写,Maven 会解释 ${FOO_BAR}
作为属性(property)。我查了一下solution并尝试过。当我只使用${FOO}
时
<properties>
<dollar>$</dollar>
<foo>{FOO_BAR}</foo>
<dollar.foo>${dollar}${foo}</dollar.foo>
</properties>
<build>
<plugins>
<plugin>
<groupId>com.google.code.maven-replacer-plugin</groupId>
<artifactId>replacer</artifactId>
<version>1.5.3</version>
<executions>
<execution>
<id>configure-logging</id>
<phase>prepare-package</phase>
<goals>
<goal>replace</goal>
</goals>
<configuration>
<includes>
<include>${my.configDir}/log4j.xml</include>
</includes>
<replacements>
<replacement>
<token>value="wat.log"</token>
<value>value="${dollar.foo}/wat.log"</value>
</replacement>
</replacements>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
结果是错误named capturing group is missing trailing '}'
。据我了解,该插件使用通常的 Java 正则表达式替换,它解释替换文本中的美元符号和花括号,以捕获正则表达式中的组。
我尝试了其他一些方法,看来这种情况下的具体错误是由于下划线造成的。如果我更改 foo
属性至{FOOBAR}
,错误更改:No group with name {FOOBAR}
.
我还尝试了其他一些方法:
foo
属性至{foo}
,我没有收到错误,但替换后会删除 $
,即我得到 value="{foo}/wat.log"
- foo
的第二次替换与 FOO_BAR
有效,但我仍然缺少美元符号{dollar}
给我一个 Illegal group reference
错误$$
、 \$
、 \\$
)并没有给我带来任何进一步的帮助,使用 unicode 或 $ 作为美元符号也没有。<有没有办法用 Maven 真正解决这个问题?我很乐意使用更多属性、更多替换或完全不同的插件。
更新:我正在 Windows 上工作 - 不确定这是否/如何影响结果。
最佳答案
你们很接近。只需在 $
字符前面加上转义反斜杠即可:
...
<replacements>
<replacement>
<token>value="wat.log"</token>
<value>value="\${dollar.foo}/wat.log"</value>
</replacement>
</replacements>
...
log4j.xml,之前:
<param name="File" value="wat.log" />
log4j.xml,之后:
<param name="File" value="${FOO_BAR}/wat.log" />
这对我有用。
关于Maven 替换器 : replacement value containing dollar signs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33667378/
在使用 Kent Becks Book TDD by Example 时,我遇到了一些我不理解的 Java 代码。 public boolean equals(Object object) {
我在名为 validate 的函数中声明了一个名为 cont 的局部变量。 我正在从验证内部调用函数进程。 我将字符串“cont”作为参数发送给验证函数。 在使用字符串 'cont' 的过程函数中,我
Dollar dollar= (Dollar) object; 这段代码有什么作用?它甚至是Java吗?还是小话?我在 TDD 中找到了它,我认为它是在考虑 Smalltalk 的情况下编写的。 最佳
我的管道在 Jenkinsfile 的 sh """元素处失败。知道哪里出了问题吗? stage('Install dependencies') { when
我正在阅读作者 Kent Beck 所著的名为“示例测试驱动开发”的书。 我正在尝试在 php 中编写类似的函数,但不理解这些步骤。 原始函数: 测试函数: public void testEqual
shell 有一个很棒的特性,当你使用“$@”时,它会在变量扩展中保留参数引用,这样脚本: for f in "$@"; do echo "$f"; done 当带参数调用时: "with space
有什么方法可以在参数扩展上下文中使用 !$ 吗?激发这个问题的理想用法是快速(根据击键)更改文件名(例如,不是将文件名保存在变量中并执行 rsvg-convert $svg > ${svg/.svg/
我有一个严重的问题,一整天我都在寻找答案,但我找不到任何东西...... 我在做什么: 我正在尝试让用户登录我的网站(在 php 中)。 密码和用户保存在我服务器上的 MySQL 数据库中。 对于我使
我一直很困惑。例如,在 php 中我有 sql 语句 $qry = "select * from table where id = $id"; 现在我可以直接在引号内插入“$”还是必须使用 $qry
因此,我们向我们的团队下了一个小赌注,看是否可行。我输了。这是代码: using System; using System.Collections.Generic; using System.Linq
我有一个相当简单的问题。 大多数 美元符号引用中都有一个命名的 HTML 实体,这正是您所期望的; $. 但在其他引用文献中,这个缺失,并告诉您只有数字实体可用 ($)。 我记得,命名实体并不存在很长
我看过一个使用 powershell 设置文件时间戳(创建时间、lastaccesstime、lastwritetime)的示例: PS>$(get-item test.txt).lastwritet
我正在使用 kable 格式化表格用于布局和 scales::dollar向记录中添加美元符号。但是,有些记录是 NA我宁愿有一个 -在输出上比 $NA . 例如我会 scales::dollar(1
我正在开发一个已经发布的 perl 代码的新版本,并发现了这一行: $|++; 据我所知,$|与管道有关,如所解释的 in this link ,我明白这一点,但我无法弄清楚++ (加号)在这里意味着
为什么这行代码 当我的所有区域设置都设置为英国时,将结果输出为 $xx.xx。我希望它输出为 £xx.xx。有任何想法吗?我尝试了字符串格式的不同变体,包括 StringFormat={}{0:C}
在输出中,new_dollars总是显示美元数量,所以我不知道如何解决这个问题。请帮我找出问题所在。 int main(void) { int dollars, cents, count, n
我用 C 编写了一段基本代码来判断密码是否安全。它根据密码是否安全返回 0 或 1。当我在 ubuntu 中传递命令行参数时,它工作正常,除非密码包含 $ 符号。因此我编写了一个程序来输出所有参数,它
在 bash 中,() 和 $() 都创建了一个子 shell。 它们之间有什么区别?它们的典型用法是什么? 最佳答案 () 只是创建一个复合命令,运行括号内的命令。 $() 做同样的事情,但也替换了
bang dollar 好像是指最后一行命令行的最后一部分。 例如 $ ls -l .... something $ !$ -l bash: -l command not found 我可以找到很多
我有以下代码。 string pattern5 = "^ba$"; string myString5 = "badabyba"; bool match5 = Regex.IsMatch(myStrin
我是一名优秀的程序员,十分优秀!