unidades una rutas ruta relativas relativa qué gestion ejemplo archivo acceso absolutas absoluta ant relative-path

ant - una - rutas absolutas y relativas linux



¿Cómo despojar el basedir de una ruta absoluta para obtener una ruta relativa? (5)

Desde Ant 1.8.0 puede usar el atributo relative de la tarea de property Ant para esto.

Por ejemplo:

<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}" />

Lleva a:

[echo] /home/.../stack_overflow/ant/my_project/some_dir [echo] my_project/some_dir

En el build.xml de mi proyecto tengo una propiedad definida:

<property name="somedir.dir" location="my_project/some_dir"/>

El valor de ${somedir.dir} será una ruta absoluta: /home/myuser/my_project/some_dir .

Lo que necesito es solo la ruta relativa ./my_project/some_dir sin el ${basedir} /home/myuser . ¿Cómo puedo lograr esto usando Ant?

Hasta ahora encontré una solución al convertir la propiedad en una ruta y luego usar "pathconvert", pero no creo que esta sea una buena solución:

<path id="temp.path"> <pathelement location="${somedir.dir}" /> </path> <pathconvert property="relative.dir" refid="temp.path"> <globmapper from="${basedir}/*" to="./*" /> </pathconvert>

¿Alguna otra sugerencia (más elegante)?


Es posible que pueda utilizar la tarea de basename Ant. Si usted tiene:

<property name="somedir" value="/path/to/file/here" /> <basename file="${somedir}" property="somebasedir" /> <echo>${somebasedir}</echo>

El valor que se hace eco es "aquí". Solo parece darte el directorio final, que puede que no obtenga lo suficiente de lo que quieres.


Este fue el enfoque que me funcionó bien en Windows, adaptado de la respuesta de @Garns:

<path id="uploadFilePath"> <fileset dir="${wcm.folderName}"> <include name="*" /> <exclude name="*.attr" /> </fileset> </path> <pathconvert property="relFilelist"> <path refid="uploadFilePath" /> <mapper> <globmapper from="${wcm.folderName}/*" to="*" handledirsep="true" /> </mapper> </pathconvert>

Pienso que handleirsep = "true" es bastante importante en globmapper, no funcionó para mí, de lo contrario, no importa cuánto jugué con las barras hacia adelante / hacia atrás. (Hago todas mis barras inclinadas hacia adelante en mis scripts de Ant para poder ejecutarlas en sistemas Unixy). Mi versión de Ant es 1.8.1.


Una solución un poco menos detallada sería especificar somepath dentro de <pathconvert> :

<pathconvert property="relative.dir"> <path location="${somepath}"/> <globmapper from="${basedir}/*" to="./*" /> </pathconvert>


location expande automáticamente la ruta utilizando la base del proyecto. Así que creo value opción de value te da un mejor control:

<property name="base.dir" value="/home/myuser"/>

y

<property name="somedir.dir" value="${base.dir}/some_dir"/>