2009-04-29 21 views
31

he creado mi propia build.xml que tiene:compilación Ant no copia los recursos

<target name="compile"> 
    <mkdir dir="build"/> 
    <javac destdir="build"> 
     <src path="src"/> 
    </javac> 
</target> 

<target name="build" depends="compile"> 
    <mkdir dir="dist"/> 
    <jar destfile="dist/app.jar" basedir="build" /> 
</target> 

<target name="run" depends="compile"> 
    <java classname="webserver.Loader" classpath="build" fork="true" />  
</target> 

Funciona muy bien. Cuando llamo a ant run para que compile y ejecute mi aplicación, pero mi aplicación tiene un paquete con íconos y no se mueve a una carpeta "compilación" para que mi aplicación termine con la excepción de que no pudo ubicar mis iconos. Cuando los muevo solo, funciona.

He intentado utilizar

<copy todir="build/app/icons"> 
    <fileset dir="src/app/icons"/> 
</copy> 

Funciona, pero me gustaría hacerlo sin el comando de copia. ¿Hay algún parámetro para javac? ¿O algo mas?

Gracias por su respuesta.

Respuesta

23

Lo sentimos, deberá copiar los archivos que no sean Java de forma manual. Los recursos técnicamente no son "fuente". La línea de comando javac no copiará los archivos de recursos de su directorio de origen al directorio de salida, tampoco lo hará la tarea javac de ant.

+0

Parece que el enganche en el compilador de eclipse java a través de ant copiará automáticamente los archivos no java en el directorio de salida. Cuando cambié a usar tareas javac ant en su lugar, tuve que hacer lo que sugirió Chris Winters. –

+0

Desde que escribí esta respuesta he cambiado a casi exclusivamente usando Maven para proyectos de Java. Hay una curva de aprendizaje decentemente empinada vs. Ant, pero vale la pena. –

4

No, no lo hay. La tarea de copia es la forma correcta de copiar recursos en sus carpetas de compilación.

43

No hay tal parámetro. Puede copiar todo tipo de archivos entre sus directorios con:

<copy todir="build"> 
    <fileset dir="src" 
      includes="**/*.xml,**/*.properties,**/*.txt,**/*.ico" /> 
</copy> 
+18

más simple: exclude = "**/*. Java" en lugar de incluir –

+0

¡Justo lo que quería! (jugando con si incluir o excluir java, o no excluir nada para enviar el origen con el jar, ideal para la depuración.) –

+6

No excluye, pero excluye: chrise

11

Para ello, puede utilizar el elemento fileset de la tarea jar en lugar de copiar los archivos manualmente. Por ejemplo:

<jar destfile="dist/app.jar" basedir="build"> 
    <fileset dir="src" includes="app/icons/**" /> 
</jar> 

Esto copiará todo en src/app/icons/ al camino app/icons en su archivo .jar.

+0

Las otras respuestas le dicen por qué no se puede hacer. Este te dice cómo hacerlo. Y funciona. Esto debe ser votado. – philburk

Cuestiones relacionadas