2010-01-15 27 views
7

Nuestro proyecto en Eclipse muestra aproximadamente las siguientes carpetas:Eclipse: exportación a .jar e incluyen archivos de recursos (ANT)

application 
    - src 
    - JRE System Library [1.6] 
    - Referenced Libraries 
    - lib 
    - rsc 

En nuestro proyecto, nos gustaría utilizar Archivo> Exportar ...> Ejecutable JAR

Bueno, eso funciona bien, con algunas excepciones: si queremos ejecutar nuestra application.jar, todavía tenemos que copiar la carpeta rsc/en la misma ubicación que application.jar.

En rsc /, tenemos otras carpetas para separar las diferentes partes. Básicamente, cargamos las piezas utilizando el código (bien un poco alterada, pero el estilo ruta es correcta)

strUrl = "file:rsc/properties/Constants.properties"; 
url = new URL(strUrl); 
ImageIcon icon = new ImageIcon(url); 

pude rightclick en RSC /> Vía de construcción> Usar como carpeta de origen.

Pero esto tampoco funciona porque eclipse no copia automáticamente la carpeta rsc en bin/-folder. Y luego no podemos ejecutarlo más desde el terminal (no empaquetado en el contenedor)

EDIT: ¿por qué eclipse no puede manejar esto correctamente? ¿Por qué tiene problemas con las carpetas de salida "anidadas"? En la pestaña Origen del cuadro de diálogo Crear ruta, podría agregar fácilmente la carpeta rsc/con la carpeta de salida establecida en bin/rsc /, pero no parece poder poner carpetas anidadas ...


EDIT 2: Ahora he podido crear un archivo xml para compilarlo con hormiga, y de alguna manera logré incluir la carpeta rsc en el jarrón. Todavía no se ejecuta debido a los mismos errores. ¿Realmente necesito verificar las rutas de recursos si están en un JAR o no? El contenido del JAR es ahora la siguiente:

META-INF/ 
META-INF/MANIFEST.MF 
configurator/ 
controller/ 
editor/ 
gui/ 
logic/ 
networking/ 
rsc/ 
rsc/gamesettings/ 
rsc/levels/ 
rsc/pics/ 
rsc/properties/ 
util/ 

pero Java todavía me odia y lanza java.io.FileNotFoundException: rsc/properties/Constants.properties con un StackTrace de alrededor de 100 líneas.


¿alguien una idea de cómo hacerlo? thx & saludos

Respuesta

15

Si marca rsc como una carpeta de origen Eclipse copiará su contenido en el directorio de salida. O simplemente puede mover rsc bajo src si desea agrupar los recursos en la salida.

Luego puede usar Class.getResource("/properties/Constants.properties") o Class.getResource("/rsc/properties/Constants.properties") y funcionará independientemente de si su aplicación está empaquetada como un contenedor o ejecutándose desde la fuente.

Como nota al margen, el protocolo file: funciona solo con archivos normales, para acceder a los archivos dentro del contenedor debe usar algo como new URL("jar:file:app.jar!/rsc/properties/Constants.properties").

+0

Sí. Esta fue la solución, pero marcar rsc/as src-folder en eclipse no hace el trabajo. Otro estudiante me condujo directamente a la misma solución. El problema era que teníamos que usar Class.getResource ("..."), la ruta precedida de un '/'. THX y saludos – Atmocreations

+0

Disculpe, ¿qué quiere decir con 'Clase # getResource()'? No hay tal método estático en la clase 'Class'. – m0skit0

+0

@ m0skit0 El método no es estático, disculpe la confusión. –

2

Para este tipo de uso, recomiendo usar Maven, que automáticamente hace eso al crear un jar. Incluso hay an Eclipse plugin.

También podría usar Ant.

+0

thx, sé que este tipo de herramientas existen. Pero no tengo ninguna experiencia con ellos y mi opinión es que si eclipse proporciona una herramienta para crear archivos jar ejecutables, supongo que debería ser posible simplemente agregar otra carpeta al contenedor sin modificarla. – Atmocreations

4

Puede probar: en el cuadro de diálogo Ruta de compilación de Java, vaya a la pestaña Bibliotecas y seleccione "Agregar carpeta de clase ...". Seleccione rsc en el cuadro de diálogo Selección de carpetas de clase. El contenido del directorio rsc ahora se incluirá en el archivo jar ejecutable.

(RSC Tenga en cuenta que en sí mismo no se incluirán, por lo que puede que tenga que añadir un nuevo subdirectorio bajo RSC para hacer la estructura de directorios en el derecho frasco.)

+0

gracias por su respuesta. Bueno, sí, eso funcionaría. Pero el problema es que no puedo mover estos objetos a rsc/rsc/porque la ejecución local (sin la creación del archivo jar) ya no funcionaría ... – Atmocreations

1

hago esto por lo general de forma manual, en su caso jar -uf foo.jar rsc que incluye todos sus recursos. Puede escribir un guión o hacerlo en hormiga

1

Como se dice en Editar 2 que tiene todo en un frasco, esto debería funcionar:

String path = "rsc/img/img.gif"; 
URL url = this.getClass().getResource(path); 
ImageIcon icon = new ImageIcon(url); 
+0

Gracias por su respuesta. Tengo que decir que "this.getClass()" se encuentra en src/util/ Lo intentaré – Atmocreations

Cuestiones relacionadas