如何在maven配置文件配置文件中将$ {basedir}属性的反斜杠替换为斜杠

时间:2010-12-04 10:38:21

标签: groovy maven profile pom.xml

我有一个定义属性 module.basedir 的pom.xml,用于包含已转换的 basedir 属性。它的定义如下:

<properties>
    <module.basedir>${basedir}</module.basedir>
</properties>

我有以下使用mgroovy插件执行的代码:

<source>
    println project.properties['module.basedir']
    project.properties['module.basedir']=project.properties['module.basedir'].replace('\\','/');
    println project.properties['module.basedir']
</source>

稍后我在其他插件中使用此属性。这一点很好,直到我将插件定义移动到maven配置文件。当maven配置文件被激活时,mgroovy插件工作正常,但是当我在下一个插件中访问属性时,我得到了未经修改的值。

这是我访问此属性的方式:

${module.basedir}

看起来,当执行配置文件时,它会创建项目中定义的属性的自己副本,并在从插件引用时使用它们。

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

我在Windows上使用gmaven-plugin创建EJB模块描述时遇到了同样的问题。我在Groovy中并不精通,但这种方法对我有用:

def basedir = project.properties['module.basedir'].replace('\\','/')
def md = (basedir + "/target/module.xml" as File)

答案 1 :(得分:0)

String path = '\\a\\b\\c'
assert path.replaceAll('\\\\', '/') == '/a/b/c'

所以你需要替换这一行:

project.properties['module.basedir']=project.properties['module.basedir'].replace('\\','/');

project.properties['module.basedir']=project.properties['module.basedir'].replace('\\\\','/');

您需要4个反斜杠的原因是因为必须转义源字符串(在我的示例中为path)中的每个双反斜杠。