[#JAVA] Generar .jar con librerías externas incluidas con Netbeans

Si algún día os veis desesperados intentando generar un fichero .jar que incluya las librerías externas que hayáis añadido a vuestro proyecto, y así poder ejecutarlo independientemente de donde se encuentre el fichero (como me ha pasado con el señor @robervkts), os dejo un pequeño workaround para conseguirlo.

Como siempre, para contextualizar: en este caso tenemos un proyecto Java en Netbeans al que incluimos la librería Lucene para realizar un spider, compuesto de indexador y buscador. Al generar el .jar nos lo crea dependiente a estar incluido en el mismo directorio que la carpeta lib, donde introduce las librerías externas que hemos añadido (podéis verlo en la declaración del classpath en el MANIFEST generado). Para evitarlo, modificamos el archivo build.xml de nuestro proyecto añadiendo:

 XML |  copy code |? 
  1. <target name="-post-jar">
  2.     <property name="store.jar.name" value="MyJarName"/>
  3.     <property name="store.dir" value="dist"/>
  4.     <property name="store.jar" value="${store.dir}/${store.jar.name}.jar"/>
  5.     <echo message="Packaging ${application.title} into a single JAR at ${store.jar}"/>
  6.     <jar destfile="${store.dir}/temp_final.jar" filesetmanifest="skip">
  7.         <zipgroupfileset dir="dist" includes="*.jar"/>
  8.         <zipgroupfileset dir="dist/lib" includes="*.jar"/>
  9.         <manifest>
  10.             <attribute name="Main-Class" value="${main.class}"/>
  11.         </manifest>
  12.     </jar>
  13.     <zip destfile="${store.jar}">
  14.         <zipfileset src="${store.dir}/temp_final.jar"
  15.         excludes="META-INF/*.SF, META-INF/*.DSA, META-INF/*.RSA"/>
  16.     </zip>
  17.     <delete file="${store.dir}/temp_final.jar"/>
  18.     <delete dir="${store.dir}/lib"/>
  19.     <delete file="${store.dir}/README.TXT"/>
  20. </target>

Donde solo tendríamos que especificar el nombre que queremos que tenga nuestro .jar en la segunda línea, reemplazando “MyJarName” por el deseado.

Gk out

About Gorka Madariaga

Media Apps Dev en Plain Concepts, ex-Microsoft en el equipo de DPE/DX y parte del equipo de @TrackSeriesTv. Basketball coach-player-lover. Hay quien dice que soy de acero.