NetBeans: despliegue de todo en un jar

Posible duplicado:
Ponga la biblioteca externa al JAR?

Tengo NetBeans 6.8 y escribí una clase que tiene dos bibliotecas (archivos jar). Al comstackrlo, obtengo una carpeta “dist” con mi project.jar y una carpeta “lib” que contiene los dos archivos jar lib.

¿Cómo podría obtener todo esto en un archivo jar? (No uso Maven / Ant o algo así).

El problema básico es que la versión actual de Java no admite tarros dentro de jars listos para usar.

La solución recomendada es usar la línea Class-Path en el archivo MANIFEST.MF dentro de su jar para apuntar a las bibliotecas requeridas (se permiten las rutas relativas) y luego desplegar todos los archivos juntos e invocarlo con “java -jar your.jar”

Si realmente desea tener una solución “jar-inside-jar”, hemos utilizado one-jar durante varios años, pero nos hemos alejado de ella, ya que nuestra JVM objective funcionaba mejor con la solución descrita anteriormente.

http://one-jar.sourceforge.net/

Lo usé con el plugin fatjar en Eclipse. No tengo ninguna experiencia con la creación en Netbeans, pero es simple construir una secuencia de comandos ant, que creo que es lo que NEtbeans usan de todos modos.

Puede crear un objective de comstackción adicional en el archivo build.xml. Y use zipfileset y zipgroupfileset para crear un gran zipgroupfileset por ejemplo

        

Estoy de acuerdo con Waverick. La forma más sencilla de hacerlo con NetBeans es agregar un destino personalizado a su build.xml. (Por cierto, en virtud de usar NetBeans, está usando Ant, ya que NetBeans usa Ant para comstackr su archivo jar).

El objective Ant de Waverick parece estar diseñado para fusionar el código comstackdo de un proyecto NetBeans diferente en el archivo jar del proyecto actual. Mis objectives a continuación hacen exactamente lo que estás buscando.

                    To run this application from the command line without Ant, try:  java -jar "${dist.jar.resolved}"   

He encontrado un buen artículo aquí . Pero parece que vale la pena mencionar que es pedir bibliotecas externas en la carpeta dest / lib. Puedes hacerlo de esa manera, pero normalmente tenemos una carpeta lib en la carpeta raíz (o lo que tengo). Si es solo cambio

a

 . 

Eso es todo.

Puede usar Java para instalar las bibliotecas externas mediante progtwigción utilizando Class.getResourceAsStream() y FileOutputStream . Las bibliotecas generalmente irán en Java\lib\ext\ .

Así es como lo enfoqué:

Puse una copia de todos los archivos JAR que utilicé en un subpaquete .res. A partir de ahí, puedo copiarlos en cualquier lugar.

 private void installLibraries() { new Thread() { @Override public void run() { System.out.println("Checking for libraries"); File jre = new File(System.getProperty("java.home")); File jar = new File(jre, "lib/ext/JAR_NAME.jar"); //Create more File objects that wrap your JAR's try { boolean added = false; if (!jar.exists()) { copyResource(jar, "JAR_NAME.jar"); added = true; } //Repeat for more JAR's if (added) { System.out.println("Libraries installed."); } else { System.out.println("Library check complete"); } catch (IOException ex) { System.out.println("Library installation failed."); ex.printStackTrace(System.out); } } private void copyResource(File dest, String src) throws IOException { System.out.println("Copying resource " + src + " to " + dest); InputStream in = THIS_CLASS_NAME.class.getResourceAsStream("/YOUR_PACKAGE/res/" + src); dest.getParentFile().mkdirs(); FileOutputStream out = new FileOutputStream(dest); byte[] buffer = new byte[1024]; int i = 0; while ((i = in.read(buffer)) > 0) { out.write(buffer, 0, i); } out.close(); in.close(); } }.start(); } 

Ejecute este método antes de hacer cualquier otra cosa, y puede ignorar por completo los archivos JAR externos que Netbeans le brinda, y simplemente distribuir uno. Como nota adicional, utilicé este método para instalar javax.comm , que no me gustó que se distribuyera de forma externa. Venía con un archivo .dll y un archivo de propiedades. Estos archivos se pueden instalar utilizando exactamente el mismo método, pero vale la pena señalar que el archivo .dll debe colocarse en el directorio Java\lib\ y los archivos de propiedades en el directorio Java\lib\ (no en la carpeta \ext ).