【问题标题】:How to replace backslashes to slashes for ${basedir} property in maven profile profile如何在 Maven 配置文件中将 ${basedir} 属性的反斜杠替换为斜杠
【发布时间】:2010-12-04 10:38:20
【问题描述】:

我有一个带有定义属性 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}

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

有什么建议吗?

【问题讨论】:

    标签: groovy maven profile pom.xml


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:
      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)都必须进行转义。

      【讨论】:

      • 不是这样,我可以看到输出中的字符串发生了变化。关键是当我写 print ${module.basedir} 我仍然得到原始值。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-30
      • 2013-04-15
      • 2014-09-09
      • 1970-01-01
      • 2017-07-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多