6
votes

Comment inclure des bibliothèques externes dans FAT Build.xml Fichier?

Dans mon code source Java, je souhaite utiliser différentes classes des archives Java (.jar) stockées dans le répertoire "lib" de mon application. Mais si je fais "Ant Run", je reçois toujours un message "java.lang.noclassdefferror". J'ai essayé plusieurs choses à la réparer, mais rien n'a fonctionné ... Peut-être que quelqu'un ici peut m'aider?

Ceci est mon Build.properties Strong> Fichier: P>

<?xml version="1.0" encoding="UTF-8" ?>
<project name="My Project" default="run" basedir=".">
  <description>My description.</description>

  <property file="build.properties" />
  <path id="classpath">
    <fileset dir="${lib.dir}" includes="*.jar"/>
  </path>

    <!-- Initialization -->
  <target name="init" description="Prepare needed directories.">
    <mkdir dir="${build.dir}" />
    <mkdir dir="${classes.dir}" />
    <mkdir dir="${jar.dir}" />
    <mkdir dir="${dist.dir}" />
    <mkdir dir="${lib.dir}" />
  </target>

    <!-- Cleanup -->
  <target name="clean" description="Remove all files created by the build/test process.">
    <delete dir="${classes.dir}" />
    <delete dir="${dist.dir}" />
  </target>

    <!-- Compile application -->
  <target name="compile">
    <mkdir dir="${classes.dir}"/>
    <javac srcdir="${src.dir}" 
       destdir="${classes.dir}" 
       debug="yes"
       includeantruntime="false">
      <!-- <classpath refid="classpath" /> -->
    </javac>
  </target>

    <!-- Java Archive -->
  <target name="jar" depends="compile">
    <!--<delete file="${jar.dir}/${app.name}-${app.version}.jar"/>-->
    <delete dir="${jar.dir}"/>
    <mkdir dir="${jar.dir}"/>
    <jar destfile="${jar.dir}/${app.name}-${app.version}.jar" basedir="${classes.dir}">
      <manifest>
        <attribute name="Class-Path" value="${lib.dir}"/>
        <attribute name="Main-Class" value="${main.class}"/>
      </manifest>
    </jar>
  </target>

    <!-- Run application -->
  <target name="run" depends="jar">

    <java jar="${jar.dir}/${app.name}-${app.version}.jar" 
        fork="true">
    </java>
    <!--
    <java fork="true" classname="${main.class}">
      <classpath>
         <path refid="classpath"/>
         <path location="${jar.dir}/${app.name}-${app.version}.jar"/>
      </classpath>
    </java>
    -->
  </target>
</project>


2 commentaires

À quoi ressemble votre répertoire lib ? Tous les fichiers JAR sont-ils largués dans ce répertoire ou y a-t-il des sous-répertoires?


Tous les fichiers JAR sont dans ce répertoire (sans aucun sous-répertoires). La structure ressemble à: ./lib/log4j-1.2.9.jar ,./lib/coberttura.jar ,./lib/easymock-3.0.jar, ... Comment puis-je inclure ces bibliothèques dans mon fichier JAR?


3 Réponses :


-1
votes

Je vois que vous avez essayé de définir votre point de classe pour la tâche .

Avez-vous essayé: xxx


edit: Vérifiez les valeurs dans votre fichier de propriétés. Avez-vous des espaces de fin pour la valeur de lib.dir ou jar.dir ?

http://ant.apache.org/faq.html#properties-not-trimmed

Ant n'a pas réussi à construire mon programme via Javac même quand je mets les pots nécessaires Dans un fichier de construction externe.Properties et les référencez-les par voie pathélentale ou Refidez de classe.

lorsque Ant charge les propriétés d'un Fichier externe, il ne touche pas le Valeur des propriétés, des blancs de fuite ne sera pas coupé par exemple.

Si la valeur représente un chemin de fichier, Comme un pot devait compiler, la tâche qui nécessite la valeur, Javac pour l'exemple ne manquerait pas de compiler depuis cela Impossible de trouver le fichier en raison de la traînée espaces.


2 commentaires

Lorsque j'utilise cela, je reçois une erreur lorsque "ANT Compiler". Pour le moment, j'exprime tous les fichiers de code source de mes fichiers de jar externes et mettez-les dans mon propre répertoire "SRC". Ensuite, je peux exécuter mon projet sans problèmes car les dépendances sont incluses lors de la compilation et de la gestion de mon projet. Mais je pense que ce n'est pas le meilleur cas d'utilisation. Mais jusqu'à présent, je n'ai trouvé aucune autre solution qui fournira les fichiers jar externes dans mon propre fichier JAR. Je pense que je dois me concentrer à nouveau sur la déclaration de classe de classe dans le manifeste que tu m'as dit ...


@Benny Neugebauer - Vérifiez vos entrées de fichiers de propriétés pour voir s'il existe une blanchie de suivi pour vos valeurs de chemin.



3
votes

Remplacement de classes.dir = $ {build.dir} / classes avec classes.dir = construction / classes et jar.dir = $ {construire. dir} / jar avec jar.dir = build / jar à partir de votre build.properties fonctionnera.


0 commentaires

2
votes

Veuillez éditer le bocal cible comme suit. Je suis sûr que cela fonctionnera. XXX


0 commentaires