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>
3 Réponses :
Je vois que vous avez essayé de définir votre point de classe pour la tâche Avez-vous essayé: p> edit: strong> Vérifiez les valeurs dans votre fichier de propriétés. Avez-vous des espaces de fin pour la valeur de http://ant.apache.org/faq.html#properties-not-trimmed P> 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. strong> p>
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. P>
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. p>
blockQuote> p>
lib.dir code> ou
jar.dir code>? P>
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.
Remplacement de classes.dir = $ {build.dir} / classes code> avec
classes.dir = construction / classes code> et
jar.dir = $ {construire. dir} / jar code> avec
jar.dir = build / jar code> à partir de votre
build.properties code> fonctionnera. p>
Veuillez éditer le bocal cible comme suit. Je suis sûr que cela fonctionnera. P> P>
À quoi ressemble votre répertoire
lib code>? 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?