2 votes

Comment définir des chemins différents dans build.xml

Je veux mettre le chemin de différents répertoires (qui contient des jars, actuellement sur d:/ext_jars). Après avoir exécuté le fichier build.xml. Je veux que ce chemin soit pris par le jar exécutable.

Actuellement, ce jar me donne des erreurs car le classpath n'est pas présent (qui était précédemment sous c:/project/lib/*.jars, converti en D:/ext_jars).

S'il vous plaît aidez-moi, comment puis-je paramétrer ce répertoire externe dans le classpath de build.xml ?


Mon code dans : build.xml

En utilisant ce code, après l'exécution du projet, tout fonctionne bien, mais après l'exécution du jar créé par ce code, il ne fonctionne pas et renvoie une erreur comme suit :

Exception in thread "main" java.lang.NoClassDefFoundError: dowlibpkg/DowLib
        at mypkg.MainApp.main(MainApp.java:109)
Caused by: java.lang.ClassNotFoundException: dowlibpkg.DowLib
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        ... 1 more

Donc, le Jar créé ne fonctionne pas.. Je veux qu'il fonctionne, est-ce que quelqu'un peut m'aider s'il vous plaît

\==============================================================

manifest.mf

Manifest-Version: 1.0 Class-Path: lib/org.springframework.asm-3.0.1.RELEASE \ lib/org.springframework.beans-3.0.1.RELEASE \ lib/org.springframework.context-3.0.1.RELEASE \ lib/org.springframework.core-3.0.1.RELEASE \ lib/org.springframework.expression-3.0.1.RELEASE \ lib/org.springframework.oxm-3.0.1.RELEASE \ lib/org.springframework.web-3.0.1.RELEASE Main-Class: myProject.MainApp

0voto

ee. Points 677

Sur la base de quelques indications des liens que j'ai fournis dans mes commentaires, vous pouvez essayer ceci (que je n'ai pas essayé):

Exemple de MANIFEST.MF généré par la tâche Ant:

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.8.2
Created-By: 1.6.0_29-b11 (Sun Microsystems Inc.)
Main-Class: path.to.my.MainClass
Class-Path: Filters.jar RXTXcomm.jar collections-generic-4.01.jar colt
 -1.2.0.jar commons-codec-1.5.jar commons-io-2.0.1.jar commons-validat
 or-1.3.1.jar concurrent-1.3.4.jar forms-1.3.0.jar gdal.jar geotiff-ja
 i.jar jai_imageio-1.1.jar jakarta-oro-2.0.1.jar java-image-scaling-0.
 8.5.jar jcommander-1.7.jar jgroups-2.12.1.Final.jar jna.jar jung-algo
 rithms-2.0.1.jar jung-api-2.0.1.jar jung-graph-impl-2.0.1.jar jung-vi
 sualization-2.0.1.jar nimrodlf-1.2.jar platform.jar stax-api-1.0.1.ja
 r swingx-beaninfo-1.6.2.jar swingx-core-1.6.2.jar vecmath-1.3.1.jar v
 lcj-1.2.0.jar wstx-asl-3.2.6.jar

Comme vous pouvez le voir, toutes les bibliothèques jar externes répertoriées dans la Class-Path suivent le nom exact des jars que l'application principale utilisera. Ils doivent tous se trouver au même chemin de fichier que le chemin du fichier jar de l'application principale. La classe de l'application principale (généralement avec la méthode main()) sera appelée depuis Main-Class du MANIFEST.MF et son jar ne doit pas être inclus dans la Class-Path. Si tout est correct, le jar sera exécutable.

Ne vous inquiétez pas du format étrange du MANIFEST.MF; il est généré dans un style de texte sur 80 colonnes par la tâche Ant.

0voto

Jeff Points 11

Il existe plusieurs façons de manipuler le classpath java, comme l'utilisation d'options en ligne de commande classpath ou l'édition de la variable CLASSPATH, mais fondamentalement, le problème que vous créez pour vous-même plus tard est que votre build devient dépendant d'une certaine structure de répertoire.

Cela rend difficile le partage de votre code et agace certainement les autres développeurs qui pourraient travailler avec vous. Parfois, il est préférable de faire un effort supplémentaire et de rendre vos dépendances disponibles sur un site web (ou de trouver un site web où elles sont déjà disponibles) et de demander à ant de les télécharger, de les décompresser, puis de les ajouter au classpath depuis le même emplacement à chaque fois (par exemple, le répertoire build/lib que vous créez).

Bien sûr, la gestion des dépendances est ce que Maven (http://maven.apache.org) propose, donc peut-être cela vaut également la peine que vous y jetiez un œil.

Jeff

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X