Ant ne peut pas trouver une classe requise par un taskdef défini en externe
Je suis en train d'utiliser l'axe de java2wsdl tâche ant pour créer un fichier wsdl à partir de l'une de mes classes java, mais je ne peux pas obtenir le chemin correct.
J'utilise Ubuntu libaxis-package java qui s'installe axis-ant.jar dans $ANT_HOME/lib et axis.jar dans /usr/share/java. Les parties intéressantes de mon build.xml ressembler à ceci:
<property name="library.dir" value="lib"/>
<property name="system.library.dir" value="/usr/share/java"/>
<path id="libraries">
<fileset dir="${library.dir}">
<include name="*.jar"/>
</fileset>
<fileset dir="${system.library.dir}">
<include name="*.jar"/>
</fileset>
</path>
<target name="genwsdl" depends="compile">
<taskdef resource="axis-tasks.properties" classpathref="libraries"/>
<axis-java2wsdl>
details omitted
</axis-java2wsdl>
</target>
De course ant genwsdl
résultats dans:
/build.xml:50: taskdef A class needed by class
org.apache.axis.tools.ant.wsdl.Wsdl2javaAntTask
cannot be found: org/apache/axis/utils/DefaultAuthenticator
Ant est en mesure de trouver la définition de l'axe de java2wsdl tâche, parce que axis-ant.jar est dans $ANT_HOME/lib, mais il ne peut pas trouver dans les classes axis.jar même si ce pot est sur le chemin défini par des "bibliothèques"
Je sais que c'est un problème de classpath parce que j'ai été capable de passer à côté DefaultAuthenticator à d'autres de classe n'est pas trouvé par faire un lien symbolique axis.jar en $ANT_HOME/lib. Comment puis-je obtenir le taskdef reconnaît pas les fichiers jar dans le répertoire /usr/share/lib ou mon projet local de répertoire lib sans créer des liens symboliques vers le tout dans $ANT_HOME/lib?
EDIT:
J'ai finalement été en mesure de réussir à générer le wsdl avec cette ligne:
ant -lib /usr/share/java/axis.jar -lib /usr/share/java/jaxrpc.jar -lib /usr/share/java/wsdl4j.jar -lib /usr/share/java/commons-logging.jar -lib /usr/share/java/commons-discovery.jar -lib build genwsdl
Je suis toujours très heureux si quelqu'un pouvait me dire ce que je fais mal à ne pas être en mesure de définir ces bibliothèques dans build.xml
source d'informationauteur Ryan Ahearn
Vous devez vous connecter pour publier un commentaire.
En général, cela fonctionne. Mais vous devez vérifier très soigneusement les classes sont où.
Si votre classe de tâche peut être chargé dans un chargeur de classe supérieure dans la hiérarchie des chargeurs de classes (comme le CLASSPATH ou ANT_HOME/lib) puis votre classpathref sera tout simplement ignoré.
Lire la Entrée de la FAQ pour plus de détails.
Remarque: l'exécution de
ant -diagnostics
peut aider aussi.Ant mécanisme pour l'ajout de bibliothèques est:
Seulement. Le manuel ne mentionne rien sur l'utilisation de l' système.de la bibliothèque.dir de la propriété. Probablement c'est à peu près ignoré à cette fin.
Aussi, exécuter ant en mode verbose ( et commentaires ) pour voir ce qui se fait sous le capot.
Pourquoi ne pas simplement prendre l'option la plus simple et spécifier le chemin de classe dans votre
<taskdef>
?Ou créer une deuxième
<classpath>
entrée de sous-ensembleslibrary.dir
?De déconner avec le
${ant.home}/lib
est pas une bonne idée et peut presque toujours être évitée.Ça marche pour moi, pour spécifier le chemin de la classe directement dans le taskdef tâche, comme menstioned par matt b. Pour mon projet que je trouve utile d'taskdef de la bibliothèque dans le dossier du projet et spécifier le chemin dans le fichier ant, simplement le programme d'installation sur d'autres pc de développement. J'utilise la suite taskdef:
A noter que cela ne fonctionne pas pour les versions ant plus tôt que la version 1.7.0.
En utilisant les réponses d'ici et toutes les informations partielles, je suis venu avec une solution. J'ai ajouté le bocal de la fourmi fichier à un dossier lib dans le projet (plus précisément les pilotes jdbc mysql). Puis-je exécuter un programme d'installation tâche ant que des copies à domicile de l'utilisateur .ant/dossier lib, puis échoue ant avec un message à redémarrer. Il échoue seulement une fois pour un utilisateur, puis marche à chaque fois. Il peut être difficile si vous mettez à jour le pot à une nouvelle version...
Voici la fourmi build.xml:
Espère que cette aide
J'ai rencontré le même problème quand je copie un *.le pot à l' {ant.home}/libs, puis j'ai de l'utilisateur de l'-lib pour localiser l' *.jar, il fonctionne ok! Je considère que c'est la nouvelle pots ne peut pas être chargé, alors je vais tester!