bla*_*ube 24 ant relative-path
在我的项目的build.xml中,我定义了一个属性:
<property name="somedir.dir" location="my_project/some_dir"/>
Run Code Online (Sandbox Code Playgroud)
价值${somedir.dir}将是一条绝对的道路:/home/myuser/my_project/some_dir.
我需要的只是./my_project/some_dir没有${basedir}价值的相对路径/home/myuser.如何使用Ant实现此目的?
到目前为止,我通过将属性转换为路径然后使用"pathconvert"找到了解决方案,但我不认为这是一个很好的解决方案:
<path id="temp.path">
<pathelement location="${somedir.dir}" />
</path>
<pathconvert property="relative.dir" refid="temp.path">
<globmapper from="${basedir}/*" to="./*" />
</pathconvert>
Run Code Online (Sandbox Code Playgroud)
还有其他(更优雅)的建议吗?
mar*_*ton 43
从Ant 1.8.0开始,您可以使用relativeAnt property任务的属性.
例如:
<property name="somedir.dir" location="my_project/some_dir"/>
<echo message="${somedir.dir}" />
<property name="somedir.rel" value="${somedir.dir}" relative="yes" />
<echo message="${somedir.rel}" />
Run Code Online (Sandbox Code Playgroud)
导致:
[echo] /home/.../stack_overflow/ant/my_project/some_dir
[echo] my_project/some_dir
Run Code Online (Sandbox Code Playgroud)
小智 7
一个稍微简洁的解决方案是指定somepath内部<pathconvert>:
<pathconvert property="relative.dir">
<path location="${somepath}"/>
<globmapper from="${basedir}/*" to="./*" />
</pathconvert>
Run Code Online (Sandbox Code Playgroud)
location使用项目的basedir. 所以我认为value选项可以让你更好地控制:
<property name="base.dir" value="/home/myuser"/>
Run Code Online (Sandbox Code Playgroud)
和
<property name="somedir.dir" value="${base.dir}/some_dir"/>
Run Code Online (Sandbox Code Playgroud)