Maven Resources Plugin的Filtering功能是非常强大的,是构建中非常重要的一项必备特性,但是最近发现了Filtering在过滤复杂文本(例如Shell脚本)时,会有一些问题,简单记录一下。以下是一段Shell脚本,脚本会多次引用${project.artifactId}
:
以下是上述脚本经Filtering处理后的版本,基中红色高亮的第三行并不是脚本中的语句,只是为了说明Filtering在进行文本替换时的行为特征而加的。
从前后对比中可以看到:复杂的/tmp/${project.artifactId}
并没有被提换,而单独一行的${project.artifactId}
被正确替换了。至于原因大概是脚本过于复杂,在文本检索或匹配时出了问题。
所以一个值得遵守的规则是:如果在Shell脚本中需要使用Maven Resources Plugin过滤的变量,最好是在脚本中单独以变量形式声明,然后在脚本各处引用Shell变量而不是大量地引用Maven变量。
基于这个建议,将脚本改为如下形式就可以正常工作了: