Compilar com dependências no Java

1 minutos de leitura

Atualizado em:

Esta post explicará como compilar uma projeto Java encapsulando as dependências em um único jar.

Quando se constrói um projeto Java, sem um controle de dependências, como o Maven ou o Gradle, é necessário adicionar as bibliotecas manualmente, e assim, quando o projeto é compilado, um diretório 'lib' é criado e deve ser carregado junto com o jar principal.

Com essa simples solução, todas essas bibliotecas do diretório 'lib' são copiadas para o .jar principal, sendo apenas necessário esse para execução.

Para isso, edite o arquivo build.xml e adicione a tag <target> descrita abaixo, dentro da tag <project>, apenas substituindo [NOME_JAR_PROJETO] pelo nome do jar principal do seu projeto.

<target name="-post-jar">
      
        <property name="store.jar.name" value="[NOME_JAR_PROJETO]"/>

        <property name="store.dir" value="dist"/>
        <property name="temp.dir" value="temp"/>
        <property name="store.jar" value="${store.dir}/${store.jar.name}.jar"/>

        <echo message="Packaging ${application.title} into a single JAR at ${store.jar}"/>

        <delete dir="${temp.dir}"/>
        <mkdir dir="${temp.dir}"/>

        <jar destfile="${temp.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>

        <delete dir="${store.dir}"/>

        <zip destfile="${store.jar}">
            <zipfileset src="${temp.dir}/temp_final.jar"
                        excludes="META-INF/*.SF, META-INF/*.DSA, META-INF/*.RSA"/>
        </zip>

        <delete dir="${temp.dir}"/>
    </target>

Seu build.xml deve ficar assim:

<?xml version="1.0" encoding="UTF-8"?>

<project name="meu_projeto" default="default" basedir=".">
    <description>Builds, tests, and runs the project meu_projeto.</description>
    <import file="nbproject/build-impl.xml"/>
   
    <target name="-post-jar">
      
        <property name="store.jar.name" value="meu_projeto"/>

        <property name="store.dir" value="dist"/>
        <property name="temp.dir" value="temp"/>
        <property name="store.jar" value="${store.dir}/${store.jar.name}.jar"/>

        <echo message="Packaging ${application.title} into a single JAR at ${store.jar}"/>

        <delete dir="${temp.dir}"/>
        <mkdir dir="${temp.dir}"/>

        <jar destfile="${temp.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>

        <delete dir="${store.dir}"/>

        <zip destfile="${store.jar}">
            <zipfileset src="${temp.dir}/temp_final.jar"
                        excludes="META-INF/*.SF, META-INF/*.DSA, META-INF/*.RSA"/>
        </zip>

        <delete dir="${temp.dir}"/>
    </target>
    
</project>

Fonte: https://www.oracle.com/technetwork/java/javamail/single-jar-141905.html

[]'s

Deixe um comentário