usar new icon example codigo borderfactory java jar manifest executable-jar

example - new icon java



Frascos de referencia dentro de un frasco (6)

Tengo un frasco cuyo contenido se ve como se muestra a continuación,

A continuación está mi archivo manifiesto

Manifest-Version: 1.0 Ant-Version: Apache Ant 1.8.3 Created-By: 1.7.0_06-b24 (Oracle Corporation) Main-Class: org.sai.com.DerbyDemo Class-Path: derby.jar derbyclient.jar derbynet.jar derbytools.jar

Cuando intento ejecutar el jar, ha lanzado ClassNotFoundExcception lo que significa que no está haciendo referencia a los jar dentro del jar externo.

En el atributo Class-Path , ¿cómo puedo hacer referencia a derby.jar ( derby.jar , etc.) dentro del jar real?


Agregue los archivos jar a su biblioteca (si usa netbeans) y modifique la classpath del archivo de manifiesto de la siguiente manera:

Class-Path: lib/derby.jar lib/derbyclient.jar lib/derbynet.jar lib/derbytools.jar

una respuesta similar existe here


En Eclipse tienes la opción de exportar el archivo ejecutable. Tiene la opción de empaquetar todos los archivos jar relacionados con el proyecto en el archivo jar generado y, de esta manera, eclipse agregar un cargador de clases personalizado que se referirá a los archivos jar integrados dentro del nuevo contenedor.


Las implementaciones predeterminadas del cargador de clases no se pueden cargar desde un jar-within-a-jar: para hacerlo, el "sub-jar" completo debería cargarse en la memoria, lo que anula los beneficios de acceso aleatorio del formato jar ( referencia pendiente: haré una edición una vez que encuentre la documentación que lo respalda).

Recomiendo usar un programa como JarSplice para agrupar todo en un solo archivo ejecutable limpio.

Editar: No se pudo encontrar la fuente de referencia, pero aquí hay un RFE no resuelto del sitio web de Sun que describe este "problema" exacto: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4648386

Además, podría ''probar'' que su programa funciona colocando los archivos jar de la biblioteca en un subdirectorio /lib de su directorio de classes , y luego ejecutándolo desde la línea de comando. En otras palabras, con la siguiente estructura de directorio:

classes/org/sai/com/DerbyDemo.class classes/org/sai/com/OtherClassFiles.class classes/lib/derby.jar classes/lib/derbyclient.jar

Desde la línea de comando, vaya al directorio ''classes'' mencionado anteriormente y escriba:

java -cp .:lib/* org.sai.com.DerbyDemo


Necesitará un cargador de clases personalizado para esto, eche un vistazo a One Jar .

One-JAR le permite empaquetar una aplicación Java junto con sus Jars de dependencia en un único archivo Jar ejecutable.

Tiene una tarea de hormiga que puede simplificar la construcción de ella también.

REFERENCIA (desde el background )

La mayoría de los desarrolladores razonablemente suponen que poner un archivo jar de dependencia en su propio archivo Jar, y agregar un atributo de ruta de clase al META-INF / MANIFEST harán el truco :

jarname.jar | /META-INF | | MANIFEST.MF | | Main-Class: com.mydomain.mypackage.Main | | Class-Path: commons-logging.jar | /com/mydomain/mypackage | | Main.class | commons-logging.jar

Lamentablemente, esto no funciona . El Java Launcher$AppClassLoader no sabe cómo cargar clases desde un Jar dentro de un Jar con este tipo de Class-Path . Intentar usar jar:file:jarname.jar!/commons-logging.jar también conduce a un callejón sin salida. Este enfoque solo funcionará si instala (es decir, dispersa) los archivos Jar auxiliares en el directorio donde está instalado el archivo jarname.jar.


No puedes. Desde el tutorial oficial :

Al utilizar el encabezado Class-Path en el manifiesto, puede evitar tener que especificar un indicador long-classpath al invocar Java para ejecutar su aplicación.

Nota: El encabezado Class-Path apunta a clases o archivos JAR en la red local, no archivos JAR dentro del archivo JAR o clases accesibles a través de protocolos de Internet. Para cargar clases en archivos JAR dentro de un archivo JAR en la ruta de la clase, debe escribir código personalizado para cargar esas clases. Por ejemplo, si MyJar.jar contiene otro archivo JAR llamado MyUtils.jar, no puede usar el encabezado Class-Path en el manifiesto de MyJar.jar para cargar clases en MyUtils.jar en la ruta de la clase.


en eclipse, haga clic derecho en proyecto, seleccione RunAs -> Ejecutar configuración y guarde la configuración de ejecución, esto se usará la próxima vez que exporte como JAR ejecutables