web-dev-qa-db-fra.com

Comment inclure une bibliothèque jar externe dans ma build Ant

J'ai les éléments suivants build.xml:

<project>

<target name="clean">
    <delete dir="./build"/>
</target>

<target name="compile">
    <mkdir dir="./build/classes"/>          
    <javac srcdir="./src" destdir="./build/classes"/>                   
</target>

<target name="jar">
    <mkdir dir="./build/jar"/>
    <jar destfile="./build/jar/DependencyFinder.jar" basedir="./build/classes">
        <manifest>
            <attribute name="DependencyFinder" value="main"/>
        </manifest>
    </jar>
</target>

<target name="run">
    <Java jar="./build/jar/DependencyFinder.jar" classname="${main-class}" fork="true"/>                    
</target>

</project>

Voici ma structure de répertoires:

/ build/lib/MagicFolder/Src /build.xml

Le dossier src contient .Java des dossiers.

Le chemin vers MagicFolder doit être un paramètre d'entrée.

lib possède une bibliothèque .jar externe qui devrait être incluse dans ma version.

build dossier qui aura compilé .jar and. class` fichiers

QUESTION: Comment dois-je changer mon build.xml? Ma build.xml devrait:

  1. Ajouter une bibliothèque externe ./lib/jbl.jar
  2. Lorsque j'exécute mon application, mettez 2 paramètres d'entrée pour mon application
13
pipsik

Si vous devez ajouter un bocal à classpath pour compiler le code (désolé, ce que vous demandez n'est pas clair), vous devez changer <javac> tâche de ressembler à ceci:

<javac srcdir="./src" destdir="./build/classes">   
    <classpath>
        <pathelement path="lib/jbl.jar"/>
    </classpath>
</javac>

Ou si vous devez ajouter le contenu de jbl.jar dans le pot que vous créez, vous devez modifier votre <jar> tâche de ressembler à ceci:

<jar destfile="./build/jar/DependencyFinder.jar" basedir="./build/classes>
    <zipgroupfileset dir="lib" includes="jbl.jar" />
    <manifest>
        <attribute name="DependencyFinder" value="main"/>
        <attribute name="Main-Class" value="org.ivanovpavel.YourMainClass"/>
    </manifest>
</jar>

Pour ajouter des arguments à <Java> appeler, utiliser imbriqué <arg> éléments:

<target name="run">
    <Java jar="./build/jar/DependencyFinder.jar:lib/jbl.jar" classname="dependencyfinder.DependencyFinder">  
        <arg value="Alexander Rosenbaum"/>
        <arg value="Dmitry Malikov"/>
    </Java>                  
</target>
34
gvlasov

Il existe deux façons d'exécuter un programme Java. L'utilisation de l'option "jar" est la plus pratique et s'appelle un fichier exécutable, mais pour le faire fonctionner, vous devez spécifier à la fois le Main classe et classpath dans le fichier manifeste comme suit:

<jar destfile="${jar.file}" basedir="${classes.dir}">
    <manifest>
        <attribute name="Main-Class" value="${jar.main.class}" />
        <attribute name="Class-Path" value="${jar.classpath}" />
    </manifest>
</jar>

Pour une réponse plus détaillée sur la façon de procéder, voir:

Exécuter Java dans un environnement cohérent

4
Mark O'Connor

essayez avec ceci:

<target name="jar" depends="clean,compile" >
   <jar destfile="./build/jar/DependencyFinder.jar">
    <fileset dir="./lib" includes="jbl.jar,mysql*.jar" />
    <fileset dir="./build/classes" excludes="**/form/*.class,**/orm/*.class,**/org/w3/xmldsig/*.class"/>
   </jar>
</target>
2
RaZieRSarE