2011-08-31 14 views
15

Sé que hay otras preguntas que apuntan al mismo problema, pero el problema es que las soluciones no me funcionan. Tengo una pequeña herramienta que se supone que debe leer los archivos que quiero tener y empacar como recursos y se basa en otros proyectos (estoy usando Eclipse Helios) que me encantaría tener como tarros en lugar de clases individuales.Cómo empaquetar recursos en Jar correctamente

Como una aplicación dentro de Eclipse puedo acceder a mis recursos a través de

String path = MyClass.class.getClassLoader().getResource("resources/" + name + ".SOURCE").getPath(); 
System.out.println(path); 
File file = new File(MyClass.class.getClassLoader().getResource("resources/" + name + ".SOURCE").toURI()); 
defaultSource = readSOURCEFile(file); 

si y sólo si coloco la carpeta de recursos bajo la ruta de salida (las fuentes compiladas) No, si lo coloco en mi carpeta src.

Cuando empaco el proyecto, los recursos en la carpeta raíz o en la carpeta de clases no se empaquetan en absoluto. Si tengo los recursos en mi carpeta src, se empaqueta bajo src/resources.

Uso Export - Runnable Jar, ¿qué estoy haciendo mal? Si intento Exportar - Jar, puedo empaquetar mis fuentes y recursos correctamente, pero tengo problemas para configurar la clase principal y no puedo ejecutar el jar. El Manifiesto es correcto y la clase está allí :-(.

Segundo problema: En el contenedor empaquetado aparece el error: URI no es jerárquico (después de mover los recursos dentro del contenedor manualmente pude ejecutar el contenedor)

Gracias de antemano!

he vinculadas las fuentes en el espacio de trabajo es que es un problema?

Respuesta

14

Marque la carpeta resource bajo la carpeta raíz del proyecto como una "carpeta de origen" en Eclipse (clic derecho en el carpeta, vaya a "Ruta de compilación"> "Usar como carpeta de origen"). Luego lea los recursos como este:

InputStream is = MyClass.class.getClassLoader().getResourceAsStream(name + ".SOURCE"); 
BufferedReader reader = new BufferedReader(new InputStreamReader(is)); 
String line = reader.readLine(); 
+0

Si hago eso, los recursos se empaquetan sin los recursos de la carpeta directamente debajo de la carpeta raíz. – UMY

+0

Tienes razón. Cambié el código en consecuencia para eliminar 'resources' de la ruta del recurso. Si desea un directorio llamado 'resources' en su jar, cree esta jerarquía de carpetas:' /resources/resources' y agregue '/resources' para eclipsar la ruta de origen como se menciona arriba. También agregue 'recursos' en la ruta del recurso en el código. –

+0

Esto es algo tan simple, pero sin SO y su increíble respuesta, estaría buscando a tientas durante tantas horas ... *** ¡¡¡Gracias !!!! *** –

Cuestiones relacionadas