Java 在ANT中解码URL
我正在开发一个ANT构建脚本,该脚本应该通过另一个应用程序(OxygenXML编辑器)调用。此应用程序传递一些属性,其中一个是路径,编码为URL(注意:我无法控制此输入;它只是一个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(“.”.
${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>