2012-02-03 17 views
5

¿Cómo convierto los nombres de las clases Java en rutas de archivos con las tareas Ant?Ant: Convertir el nombre de la clase a la ruta del archivo

Por ejemplo, dada una propiedad que contiene foo.bar.Duck me gustaría salir foo/bar/Duck.class.

Intenté (y fallé) implementar esto en términos de <pathconvert> y <regexpmapper>.

Respuesta

0

Aquí está otra manera, usando Ant resources y unpackagemapper, que está diseñado para este propósito. El opuesto package mapper también está disponible.

<property name="class.name" value="foo.bar.Duck"/> 

<resources id="file.name"> 
    <mappedresources> 
    <string value="${class.name}" /> 
    <unpackagemapper from="*" to="*.class" /> 
    </mappedresources> 
</resources> 

utiliza el valor de los recursos por medio de la sintaxis ayudante propiedad ${toString:...}, por ejemplo:

<echo message="File: ${toString:file.name}" /> 

Rendimientos

[echo] File: foo/bar/Duck.class 
+0

Esta solución funciona solamente ** y ** aunque sólo el recurso se puede encontrar en otros lugares. De lo contrario, use la solución [@matt] (http://stackoverflow.com/a/9135198/1099452). – lucasvc

3

Aquí está una manera posible de hacer esto:

<property name="class.name" value="foo.bar.Duck"/> 

<loadresource property="file.name"> 
    <string value="${class.name}" /> 
    <filterchain> 
    <replaceregex pattern="\." replace="/" flags="g" /> 
    <replaceregex pattern="$" replace=".class" /> 
    </filterchain> 
</loadresource> 

Esto pone el foo/bar/Duck.class deseada en la propiedad file.name.

0

me siento utilizando hormiga script Javascript para esto es mucho más simple

 <property name="class.name" value="foo.bar.duck" /> 
     <script language="javascript"> 
      var className = project.getProperty("class.name"); 
      println("before: " + className); 
      var filePath= className.replace("\\", "/"); 
      println("File Path: "+filePath); 
      project.setProperty("filePath", filePath);    
     </script> 
     <echo message="${filePath}" /> 

nota: que el nombre de su variable es el mismo que el argumento, por ejemplo var wsPath, puede dar error, ¡me lo dio!

cortesía: https://stackoverflow.com/a/16099717/4979331

Cuestiones relacionadas