Alterar a pasta de dependências do projeto (lib) – java netbeans ant
Pergunta:
Ao compilar meu projeto no Netbeans é gerado os arquivos dessa forma:
./dist
./dist/meuProjeto.jar
./dist/readme.txt
./dist/lib
./dist/lib/dependencia1.jar
./dist/lib/dependencia2.jar
E eu quero que seja gerado sem a pasta lib, dessa forma:
./dist
./dist/meuProjeto.jar
./dist/readme.txt
./dist/dependencia1.jar
./dist/dependencia2.jar
Sei que tem alterar o build.xml, mas não encontrei nada que se referia em como alterar o destino dos .jar dependentes.
Autor da pergunta Gleison
Resposta Gleison:
acredito que você esteja procurando fazer algo do tipo “Big Jar”, empacotando todas as dependências dentro de um único arquivo .jar
Para isto você deve utilizar o “Ant”.
No Netbeans, abra o arquivo build.xml e deixa a tag “project” como esta abaixo substituindo “NOME_DO_SEU_JAR” pelo nome do jar desejado:
<project name="NOME_DO_SEU_JAR" default="default" basedir=".">
<description>DESCRICAO_DO_SEU_PROJETO</description>
<import file="nbproject/build-impl.xml"/>
<target name="-post-jar">
<property name="store.jar.name" value="NOME_DO_SEU_JAR"/>
<property name="store.dir" value="store"/>
<property name="store.jar" value="${store.dir}/${store.jar.name}.jar"/>
<echo message="Packaging ${store.jar.name} into a single JAR at ${store.jar}"/>
<delete dir="${store.dir}"/>
<mkdir dir="${store.dir}"/>
<jar destfile="${store.dir}/temp_final.jar" filesetmanifest="skip">
<zipgroupfileset dir="dist" includes="*.jar"/>
<zipgroupfileset dir="dist/lib" includes="*.jar"/>
<manifest>
<attribute name="Main-Class" value="${main.class}"/>
</manifest>
</jar>
<zip destfile="${store.jar}">
<zipfileset src="${store.dir}/temp_final.jar"
excludes="META-INF/*.SF, META-INF/*.DSA, META-INF/*.RSA"/>
</zip>
<delete file="${store.dir}/temp_final.jar"/>
</target>
Para conseguir o resultado desejado tive que fazer dois ajustes.
1º No arquivo meuProjetonbprojectbuild-impl.xml ajustei a linha:
<globmapper from="*" to="lib/*"/>
Para:
<globmapper from="*" to="*"/>
Essa linha tem como finalidade definir o caminho de onde estão os .jar dependentes, em relação ao .jar sendo executado. Esse caminho é gerado por esse script e fica no manifest.mf que é salvo dentro do .jar compilado.
2º No arquivo meuProjetobuild.xml adicionei as linhas:
<target name="-post-jar">
<echo message="Copiando as bibliotecas dependentes para o mesmo diretório do jar"/>
<copy todir="${dist.dir}">
<fileset dir="${dist.dir}lib"/>
</copy>
<delete dir="${dist.dir}lib"/>
</target>
PS: Lembrando que está solução é extremamente dependente da IDE usada, neste caso o NetBeans.



