Ant propertyregex任务替换字符串中的特殊字符

时间:2016-12-20 09:59:08

标签: maven ant

我的字符串是C:\tools\jenkins\HOME\workspace\MAL1793_Driver_DIO

我想用UNIX样式路径"\"替换windows样式的目录路径"/"

我在我的pom文件中使用了一个Ant propertyregex任务来实现此目的。

<execution>
    <id>ReplaceWSPath</id>
    <phase>process-resources</phase>
    <configuration>
    <tasks>
        <echo>"Updating workspace path"</echo>
        <propertyregex 
        property="WSPath"
        input="C:\tools\jenkins\HOME\workspace\MAL1793_Driver_DIO"
        regexp="\"
        replace="/"
        global="true" />
        <echo>"workspace Path = ${WSPath}"</echo>
    </tasks>
    </configuration>
    <goals>
    <goal>run</goal>
    </goals>
</execution>

但执行后我收到此错误:

Problem: failed to create task or type propertyregex
[ERROR] Cause: The name is undefined.
[ERROR] Action: Check the spelling.
[ERROR] Action: Check that any custom tasks/types have been declared.
[ERROR] Action: Check that any <presetdef>/<macrodef> declarations have taken place.

我正在使用Ant版本1.7。是否缺少任何设置?

2 个答案:

答案 0 :(得分:1)

<propertyregex>任务不是Ant的一部分,它是Ant任务的第三方Ant-Contrib集合的一部分。您引用的错误消息表明您至少缺少在构建文件中使用Ant-Contrib所需的<taskdef>

有关如何设置和使用Ant-Contrib的说明,请访问SourceForge

  

首先,您必须安装Apache Ant本身,大部分是Ant-Contrib   任务需要Ant 1.5或更高版本才能正常工作。你可以下载Ant   来自Apache

     

Ant {contrib版本可在downloads页面获得。邮件   可以从project页面访问列表,CVS和错误跟踪器。

     

有关cpptasks的安装说明,请参阅cc任务。至   安装ant-contrib:

     
      
  1. 将ant-contrib-0.3.jar复制到Ant的lib目录中   安装。如果要在自己的项目中使用其中一个任务,   添加行

         

    <taskdef resource="net/sf/antcontrib/antcontrib.properties"/>

  2.         

    到你的构建文件。

         
        
    1. 将ant-contrib-0.3.jar保存在一个单独的位置。你现在必须   告诉Ant明确在哪里找到它(比如在/ usr / share / java / lib中):

           

      <taskdef resource="net/sf/antcontrib/antcontrib.properties"> <classpath> <pathelement location="/usr/share/java/lib/ant-contrib-0.3.jar"/> </classpath> </taskdef>

    2.   

如果您还没有Ant-Contrib,或者在构建中需要其他任何内容,您可以考虑使用内置的Ant <pathconvert>任务作为<propertyregex>的替代。

答案 1 :(得分:0)

我觉得使用ant script-javascript更加简单

        <property name="wsPath" value="C:\tools\jenkins\HOME\workspace\MAL1793_Driver_DIO" />
        <script language="javascript">
            var wsPath_BackSlash = project.getProperty("wsPath");
            println("before: " + wsPath_BackSlash);
            var wsPath_FrwdSlash= wsPath_BackSlash.replace("\\", "/");
            println("wsPath_FrwdSlash: "+wsPath_FrwdSlash);
            project.setProperty("wsPath", wsPath_FrwdSlash);                
        </script>
        <echo message="${wsPath}" />

注意:将变量命名为与参数相同,例如var wsPath可能会给出错误,它给了我!

礼貌:https://stackoverflow.com/a/16099717/4979331