Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在ANT中解码URL_Java_Url_Ant_Urldecode - Fatal编程技术网

Java 在ANT中解码URL

Java 在ANT中解码URL,java,url,ant,urldecode,Java,Url,Ant,Urldecode,我正在开发一个ANT构建脚本,该脚本应该通过另一个应用程序(OxygenXML编辑器)调用。此应用程序传递一些属性,其中一个是路径,编码为URL(注意:我无法控制此输入;它只是一个URL)。例如,属性${project.url}被分配到文件:/F:/projectpath/。在我的ANT脚本中,我正在剥离文件:/部分,以获得可用于ANT任务(如)的路径。您可以始终运行任务来设置变量,然后在build.xml中稍后使用该变量 例如: xmlfiles=new java.io.File(“.”.

我正在开发一个ANT构建脚本,该脚本应该通过另一个应用程序(OxygenXML编辑器)调用。此应用程序传递一些属性,其中一个是路径,编码为URL(注意:我无法控制此输入;它只是一个URL)。例如,属性
${project.url}
被分配到
文件:/F:/projectpath/
。在我的ANT脚本中,我正在剥离
文件:/
部分,以获得可用于ANT任务(如
)的路径。您可以始终运行
任务来设置变量,然后在build.xml中稍后使用该变量

例如:


xmlfiles=new java.io.File(“.”.listFiles().findAll{it=~“\.xml$”}
xmlfiles.sort().each{self.log(it.toString())}
FoggyDay的优秀课程让我走上了解决问题的正确道路。我定义了一个
任务,可用于:

  • 对路径的URL进行解码,以及
  • 将它们存储在可在ANT文件中使用的属性中 我不能编写Java程序,所以我求助于JavaScript并使用了它的功能。由于此任务是ANT任务的对应任务,因此我将其命名为“makepath”

    下面是一个工作示例生成文件:

    <project>
      <property name="project.url" value="file:/F:/project%20path"/>
      <scriptdef name="makepath" language="javascript">
        <attribute name="url"/>
        <attribute name="property"/>
        <![CDATA[
          var decodedUrl = decodeURIComponent(attributes.get("url"));
          var path = decodedUrl.replace(/^[^:]+:\/+/g, "");
          self.project.setProperty( attributes.get("property"), path )
        ]]>
      </scriptdef>
    
      <makepath url="${project.url}" property="project.path"/>
      <echo>$project.path: ${project.path}</echo>
    
    </project>
    
    
    $project.path:${project.path}
    

    当然,这只是一个说明性的例子(否则,如果您需要路径,显式声明URL就没有多大意义)。但是当您无法控制
    ${project.url}
    属性的值(在我的例子中,它是通过外部程序传递的)时,这似乎是一种方便的方法,可以将其转换为对ANT上下文有用的内容。

    好的,所以我想我可以定义一个简单的Javascript任务
    ,但我不知道如何将其集成为一种函数,1)转义,例如${project.url},2)将其存储在单独的属性${project.path}中供以后使用。很抱歉我的无知,我正在拼命破解ANT,但我看不出这个拼图的各个部分是如何匹配的。你的建议为我指明了一个可行的解决方案,非常感谢@FoggyDay!
    <project>
      <property name="project.url" value="file:/F:/project%20path"/>
      <scriptdef name="makepath" language="javascript">
        <attribute name="url"/>
        <attribute name="property"/>
        <![CDATA[
          var decodedUrl = decodeURIComponent(attributes.get("url"));
          var path = decodedUrl.replace(/^[^:]+:\/+/g, "");
          self.project.setProperty( attributes.get("property"), path )
        ]]>
      </scriptdef>
    
      <makepath url="${project.url}" property="project.path"/>
      <echo>$project.path: ${project.path}</echo>
    
    </project>