2013-05-24 4 views
6

Я следую примеру исходного кода , но я получаю сообщение об ошибке при выполнении задачи ftp. Вот мой build.xml файл:ant: ftp task failing из-за NoClassDefFoundError

?xml version="1.0"?> 
<project name="HelloWorld" default="deploy"> 
    <target name="init"> 
    <mkdir dir="build/classes" /> 
    <mkdir dir="dist" /> 
    </target> 
    <target name="compile" depends="init"> 
    <javac includeantruntime="false" 
     srcdir="src" 
     destdir="build/classes"/> 
    </target> 
    <target name="doc" depends="init"> 
    <javadoc destdir="build/classes" 
     sourcepath="src" 
     packagenames="org.*" /> 
    </target> 
    <target name="package" depends="compile,doc"> 
    <jar destfile="dist/project.jar" 
     basedir="build/classes" /> 
    </target> 
    <taskdef name="ftp" classname="org.apache.tools.ant.taskdefs.optional.net.FTP"> 
    <classpath> 
     <pathelement location="/usr/local/ant/lib/ant-commons-net.jar"/> 
    </classpath> 
    </taskdef> 
    <target name="deploy" depends="package"> 
    <ftp classname="org.apache.tools.ant.taskdefs.optional.net.FTP" 
     server="${server.name}" 
     userid="${ftp.username}" 
     password="${ftp.password}"> 
     <fileset dir="dist" /> 
    </ftp> 
    </target> 
</project> 

Вот некоторые настройки:

$ ant -version 
Apache Ant(TM) version 1.9.0 compiled on March 5 2013 
$ echo $ANT_HOME 
/usr/local/ant 
$ ls -l $ANT_HOME 
lrwxrwxrwx 1 root root 17 May 20 11:54 /usr/local/ant -> apache-ant-1.9.0/ 

Вот выход с ошибкой я получаю. Я думал, что файлы сборки Ant должны быть переносимыми. В чем проблема? Как-то FTP-задача «Ant» ищет имя класса, которое исходит из класса , который не распространяется вместе с муравьем. Я попытался указать задачу в класс, распространяемый вместе с ant, но ant по-прежнему не считает, что соответствующий класс задал ftp, который он ищет.

Buildfile: /home/johndoe/ex/build.xml 

init: 

compile: 

doc: 
    [javadoc] Generating Javadoc 
    [javadoc] Javadoc execution 
    [javadoc] Loading source files for package org.example.helloworld... 
    [javadoc] Constructing Javadoc information... 
    [javadoc] Standard Doclet version 1.7.0_21 
    [javadoc] Building tree for all the packages and classes... 
    [javadoc] Building index for all the packages and classes... 
    [javadoc] Building index for all classes... 

package: 
     [jar] Building jar: /home/johndoe/ex/dist/project.jar 

deploy: 

BUILD FAILED 
/home/johndoe/ex/build.xml:30: Could not create type ftp due to java.lang.NoClassDefFoundError: org/apache/commons/net/ftp/FTPClientConfig 
    at org.apache.tools.ant.taskdefs.optional.net.FTP$LanguageCode.getValidLanguageCodes(FTP.java:2698) 
    at org.apache.tools.ant.taskdefs.optional.net.FTP$LanguageCode.<clinit>(FTP.java:2694) 
    at org.apache.tools.ant.taskdefs.optional.net.FTP.<init>(FTP.java:137) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:525) 
    at org.apache.tools.ant.AntTypeDefinition.innerCreateAndSet(AntTypeDefinition.java:328) 
    at org.apache.tools.ant.AntTypeDefinition.createAndSet(AntTypeDefinition.java:274) 
    at org.apache.tools.ant.AntTypeDefinition.icreate(AntTypeDefinition.java:219) 
    at org.apache.tools.ant.AntTypeDefinition.create(AntTypeDefinition.java:206) 
    at org.apache.tools.ant.ComponentHelper.createComponent(ComponentHelper.java:285) 
    at org.apache.tools.ant.ComponentHelper.createComponent(ComponentHelper.java:263) 
    at org.apache.tools.ant.UnknownElement.makeObject(UnknownElement.java:417) 
    at org.apache.tools.ant.UnknownElement.maybeConfigure(UnknownElement.java:163) 
    at org.apache.tools.ant.Task.perform(Task.java:347) 
    at org.apache.tools.ant.Target.execute(Target.java:435) 
    at org.apache.tools.ant.Target.performTasks(Target.java:456) 
    at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1393) 
    at org.apache.tools.ant.Project.executeTarget(Project.java:1364) 
    at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41) 
    at org.apache.tools.ant.Project.executeTargets(Project.java:1248) 
    at org.apache.tools.ant.Main.runBuild(Main.java:851) 
    at org.apache.tools.ant.Main.startAnt(Main.java:235) 
    at org.apache.tools.ant.launch.Launcher.run(Launcher.java:280) 
    at org.apache.tools.ant.launch.Launcher.main(Launcher.java:109) 
Caused by: java.lang.ClassNotFoundException: org.apache.commons.net.ftp.FTPClientConfig 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:423) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:356) 
    ... 26 more 

Total time: 2 seconds 

В идеале, мне не нужно было загружать другие классы, чтобы заставить муравья работать. Он должен работать из коробки, в противном случае он не переносится. Плюс, если бы кто-то мог помочь мне, где скачать классы, которые отсутствуют, это будет отличная помощь.

Спасибо.

ответ

14

я был в состоянии решить эту проблему путем загрузки Викисклада нетто-3,2-bin.tar.gz из http://commons.apache.org/proper/commons-net/download_net.cgi и установка Викисклада нетто-3.2.jar в моей/USR/местные/муравей/Lib папки.

С уважением.

0

Если вы используете дистрибутив Debian Linux или Raspbian на Raspberry Pi, вы можете просто решить эту проблему, запустив:

sudo apt-get install libcommons-net-java 
1

Согласно https://ant.apache.org/manual/Tasks/ftp.html, вам необходимо установить Apache Commons Net и Jakarta Oro.

Скопируйте эти банки в каталог \ lib, как сказал Джейсон Позит.

Если вы используете Eclipse, вам может потребоваться обновить путь сборки Ant. Перейдите в «Настройки»> «Ant»> «Runtime»> «Добавить внешние JAR», чтобы добавить эти библиотеки в путь Ant.

+0

Это сработало для меня, спасибо! – GreenhouseVeg

0

Была такая же проблема. Это случилось со мной, когда я использовал ant-1.9.1 вместо ant-1.8.2.

Переключение версии муравья исправлено.

0

шаги, которые работали для меня

Перейдите в папку, где Дженкинс установлен

jenkins>>tools>>hudson.tasks.Ant_AntInstallation>>(ANT VERSION Installed)>>lib 

место в ниже файлов & рестарт Дженкинс

  1. Обще-нетто-3.3.jar
  2. commons-net-3.4.jar
  3. jakarta-oro.jar