build.xml contient Le Taskdef suivant: P> jette une erreur p> Je ne peux pas modifier l'installation de fourmis standard (par exemple jsch.jar en ant lib
répertoire, ou supprimer Ant-Jsch.jar) ou ajouter des indicateurs de ligne de commande ou modifiez
Variables d'environnement système, etc.: Le script doit fonctionner avec une fourmi par défaut
Sur différents systèmes. P> Je repousse en fait la question posée à l'origine ici:
http: //ant.1045680.n5.nébababé.com/specifiant-Location-Of-an-External-library-within-build-xml-td1344969.html p> mais ne pouvait pas obtenir la réponse À propos du chargeur de classe au travail. P> p>
7 Réponses :
Créer une référence de chemin puis utilisez-le dans votre Définition de la tâche:
<path id="ssh.path"> <pathelement location="${lib1.dir}/helloworld.jar"/> <fileset dir="${lib2.dir}"> <include name="*.jar"/> </fileset> </path> <taskdef name="mytask" classname="org.mytask" classpathref="ssh.path" />
Enfin j'ai trouvé une solution de travail (pour la fourchette 1.7.1 au moins). Vous devez d'abord supprimer ant-jsch.jar code> à partir de
ant_home / lib code> comme la plante se plaint de cela et est confuse. Puis chargez des bibliothèques du projet lui-même:
<available property="ant-jsch.present" file="${ant.home}/lib/ant-jsch.jar"/>
<fail if="ant-jsch.present" message="Please remove ant-jsch.jar from ANT_HOME/lib see [http://ant.apache.org/faq.html#delegating-classloader]"/>
<path id="jsch.path">
<pathelement location="lib/ant-jsch.jar" />
<pathelement location="lib/jsch-0.1.44.jar" />
</path>
<taskdef name="scp" classname="org.apache.tools.ant.taskdefs.optional.ssh.Scp" classpathref="jsch.path" />
<taskdef name="sshexec" classname="org.apache.tools.ant.taskdefs.optional.ssh.SSHExec" classpathref="jsch.path" />
Il semble que ce soit un problème courant et je pense que c'est la meilleure solution, sauf au lieu d'échouer, je vais simplement aller de l'avant et supprimer le /lib/ant-jsch.jar. Au cas où il aide les autres, Paulo donne une explication du problème de base dans son SO Réponse à une question SCP associée et Le même problème se produit avec Junit et est expliqué ici
Mais cela nécessite une modification de l'installation de fourmis standard.
J'ai eu lieu avec ce problème pendant des jours et cette solution est la seule à laquelle je pourrais aller travailler!
Donc, cette question est ancienne, mais j'ai conçu une autre approche qui peut aider les autres. Nous pouvons frayer une fourmi d'un
<ant target="sendfile">
<!-- Example: send /etc/os-release file to remote dir /home/myself -->
<property name="file" value="/etc/os-release"/>
<property name="todir" value="/home/myself"/>
</ant>
Pour référence, une approche que je trouve utile est de reconditionner les pots, de sorte qu'ils ne sont pas en conflit - vous pouvez le faire dans la fourmi en utilisant Jarjar comme ceci:
<taskdef name="jarjar" classname="com.tonicsystems.jarjar.JarJarTask" classpath="${basedir}/lib/build/jar/jarjar-1.4.jar"/> <taskdef name="scp" classname="repackaged.scp.org.apache.tools.ant.taskdefs.optional.ssh.Scp" classpath="${basedir}/lib/build/jar/repackaged-scp.jar"/> <target name="repackage.scp" description="Repackages Ant's optional SCP task and the JSch implementation to avoid conflicting with one on Ant's classpath"> <delete file="${basedir}/lib/build/jar/repackaged-scp.jar" failonerror="false"/> <jarjar basedir="." jarfile="${basedir}/lib/build/jar/repackaged-scp.jar" includes="nothing"> <zipfileset src="${basedir}/lib/build/jar/ant-jsch-1.9.1.jar"/> <zipfileset src="${basedir}/lib/build/jar/jsch-0.1.50.jar"/> <rule pattern="com.jcraft.jsch.**" result="repackaged.scp.com.jcraft.jsch.@1"/> <rule pattern="org.apache.tools.ant.taskdefs.optional.ssh.**" result="repackaged.scp.org.apache.tools.ant.taskdefs.optional.ssh.@1"/> </jarjar> </target>
créer ~ / .ant / lib code> et copiez
jsch.jar code> dans ce cadre dans la partie de l'initialisation de la construction.
<target name="init">
<property name="user.ant.lib" location="${user.home}/.ant/lib"/>
<mkdir dir="${user.ant.lib}"/>
<copy todir="${user.ant.lib}">
<fileset dir="${basedir}/build/tools" includes="jsch-*.jar"/>
</copy>
</target>
J'ai pu résoudre ce problème après la poste d'ici
https://stackoverflow.com/a/858744/3499805
puis
Il y a un astuce avec Je me demande comment _ p> urlclassloader code>. En l'utilisant, nous pouvons faire
jsch code> accessible à
ant-jsch code>.
classLoaderTask code> de la réponse par @ user3499805 fonctionne. < / p>