2009-08-01 14 views
21

Estoy en el proceso de empaquetar mi aplicación java en un archivo jar. Estoy usando hormiga y eclipse. Debo incluir realmente en el archivo jar un par de archivos separados sin código (archivos xml y txt) directamente debajo de la carpeta raíz, no en el mismo lugar que el código.agregando recursos sin código al archivo jar usando Ant

Estoy tratando de utilizar includesfile, pero eso no parece funcionar, aquí es mi tarea ant:

<target name="distribute" depends="compile" includesfile="readthis.txt"> 
    <jar destfile="${distributionDir}/myjar.jar" > 
     <fileset dir="${outputDir}"/> 
    <fileset dir="${sourceDir}"/>   
    </jar> 
</target> 

Lo anterior funciona bien cuando omite el argumento includesfile. Además, necesito agregar varios archivos sin código. Estos archivos se encuentran directamente debajo de la carpeta del proyecto raíz en Eclipse, y no dentro de ningún paquete de Java.

Además, como puede ver arriba, básicamente estoy incluyendo también mi código fuente. ¿Hay alguna forma de decirle a la tarea jar que coloque el código fuente en una carpeta separada del código compilado?

Como tarea de compilación o compilación, Ant puede separar fácilmente el código fuente de las clases compiladas. Pero, ¿hay alguna manera de hacerlo dentro de un archivo jar también?

Muchas gracias por su tiempo!

Respuesta

34

usted no debe tener un atributo includesfile en un objetivo para empezar, y sospecho que ha entendido mal el punto de que de todos modos - la idea es que el archivo que especifique con includesfile contiene patrones de los archivos que desea include, si no quiere ponerlos en su archivo Ant.

Me parece que lo único que necesita es un conjunto de archivos adicional que contenga los archivos adecuados que necesita. Por ejemplo, para readthis.txt:

<target name="distribute" depends="compile"> 
    <jar destfile="${distributionDir}/myjar.jar" > 
    <fileset dir="${outputDir}"/> 
    <fileset dir="${sourceDir}"/> 
    <fileset file="readthis.txt" /> 
    </jar> 
</target> 

También sugeriría que se crea un nuevo directorio para los recursos, por lo que puedo hacer:

<target name="distribute" depends="compile"> 
    <jar destfile="${distributionDir}/myjar.jar" > 
    <fileset dir="${outputDir}"/> 
    <fileset dir="${sourceDir}"/> 
    <fileset dir="${resourcesDir}" /> 
    </jar> 
</target> 

sin problemas. Esto también mantendrá la estructura de tu directorio más limpia, facilitando la búsqueda de cosas de arriba hacia abajo.

+0

Gracias! Eso ciertamente ayudó. Me preguntaba si también puedo decirle a la tarea jar que separe la fuente de las clases compiladas. En este momento, tanto el origen como las clases se encuentran en la misma estructura de paquete. ¿No debería la tarea jar conservar las carpetas de salida y src? Lo que significa que cuando expando el jar, veo en myjar/code/my/package/file.java y file.class Pensé que la tarea jar podría conservar las carpetas como: myjar/code/my/package /source/file.java - y por separado myjar/code/my/package/build/file.class ¿Me falta algo en el uso que hago de la tarea jar? – denchr

+0

No, eres incorrecto. Deberían estar uno al lado del otro. Si el contenedor contiene una estructura de carpeta como code/my/package/build/file.class, eso implicaría que el nombre del paquete debe ser code.my.package.build. También podría simplemente poner las fuentes en un segundo archivo JAR. –

+0

Veo a qué te refieres. Algo así como lo que estoy sugiriendo tendría implicaciones para el nombre del paquete ... Por lo tanto, en general, si quiero incluir la fuente en mi archivo jar, * tiene * para estar en la misma carpeta que la compilación compilada. – denchr

Cuestiones relacionadas