我一直在关注一些示例源代码 但是我在执行ftp任务时遇到错误。 这是我的build.xml文件:
?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 build文件应该是可移植的。 这里有什么问题?不知何故,“Ant”FTP任务 查找来自类的类名 不与蚂蚁分发。我试着指点 与蚂蚁分发的班级任务 似乎还没有找到相应的类 到它正在寻找的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
理想情况下,我不应该下载其他类来让ant工作。这应该 开箱即用,否则不便携。另外,如果有人可以 帮助我下载缺少它的类的位置 很有帮助。
感谢。
答案 0 :(得分:19)
我可以通过下载commons-net-3.2-bin.tar.gz解决问题 来自http://commons.apache.org/proper/commons-net/download_net.cgi 并将commons-net-3.2.jar安装到我的/ usr / local / ant / lib文件夹中。
问候。
答案 1 :(得分:2)
根据https://ant.apache.org/manual/Tasks/ftp.html,您需要安装Apache Commons Net和Jakarta Oro。
将这些罐子复制到你的\ lib目录,正如Jason Posit所说。
如果您使用的是Eclipse,则可能需要更新Ant构建路径。转到“首选项”&gt; “Ant”&gt; “运行时间”&gt; “添加外部JAR”将这些库添加到Ant构建路径中。
答案 2 :(得分:1)
如果你在Raspberry Pi上使用Debian Linux发行版或Raspbian,你可以通过运行来解决这个问题:
sudo apt-get install libcommons-net-java
答案 3 :(得分:0)
有同样的问题。当我使用ant-1.9.1而不是ant-1.8.2时,它发生在我身上。
切换ant版本修复它。
答案 4 :(得分:0)
对我有用的步骤
导航到安装Jenkins的文件夹
jenkins>>tools>>hudson.tasks.Ant_AntInstallation>>(ANT VERSION Installed)>>lib
放置以下文件&amp;重启詹金斯