我正在尝试使用Ant任务上传文件。如果我直接使用Ant文件被上传,但如果我通过Maven调用ant任务(使用maven-antrun-plugin
),我会收到以下错误:
发生了Ant BuildException:执行此行时发生以下错误:
/home/me/proj/build.xml:15: Problem: failed to create task or type ftp
Cause: the class org.apache.tools.ant.taskdefs.optional.net.FTP was not found.
This looks like one of Ant's optional components.
Action: Check that the appropriate optional JAR exists in
-ANT_HOME/lib
ant-commonsnet.jar显然可供Ant使用:
$ ls $ANT_HOME/lib | grep ant-commons-net
ant-commons-net.jar
是否为maven-antrun-plugin单独定义了Ant类路径,还是我遗漏了什么?
答案 0 :(得分:5)
Ant 明显可以使用
ant-commons-net.jar
是的,但是Maven和maven-antrun-plugin
没有使用您的本地Ant安装。
Ant类路径是为
maven-antrun-plugin
单独定义的,还是我遗漏了什么?
Using tasks not included in Ant's default jar中记录了使用Ant默认jar中未包含的Ant任务的方法(这肯定有帮助):
使用未包含在内的Ant任务 Ant jar,像Ant可选或自定义 任务您需要添加依赖项 任务需要运行到 插件类路径并使用
maven.plugin.classpath
参考 if 需要的。<project> <modelVersion>4.0.0</modelVersion> <artifactId>my-test-app</artifactId> <groupId>my-test-group</groupId> <version>1.0-SNAPSHOT</version> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-antrun-plugin</artifactId> <version>1.6</version> <executions> <execution> <id>ftp</id> <phase>deploy</phase> <configuration> <target> <ftp action="send" server="myhost" remotedir="/home/test" userid="x" password="y" depends="yes" verbose="yes"> <fileset dir="${project.build.directory}"> <include name="*.jar" /> </fileset> </ftp> <taskdef name="myTask" classname="com.acme.MyTask" classpathref="maven.plugin.classpath"/> <myTask a="b"/> </target> </configuration> <goals> <goal>run</goal> </goals> </execution> </executions> <dependencies> <dependency> <groupId>commons-net</groupId> <artifactId>commons-net</artifactId> <version>1.4.1</version> </dependency> <dependency> <groupId>ant</groupId> <artifactId>ant-commons-net</artifactId> <version>1.6.5</version> </dependency> <dependency> <groupId>ant</groupId> <artifactId>ant-nodeps</artifactId> <version>1.6.5</version> </dependency> </dependencies> </plugin> </plugins> </build> </project>
答案 1 :(得分:1)
正如Pascal所提到的, maven-antrun-plugin 没有使用 $ ANT_HOME 环境变量指定的ant,而他提到的配置可能是从纯粹的maven角度始终如一地做到这一点。
但是,jar可以存储在 $ USER_HOME / .ant / lib 而不是 $ ANT_HOME / lib 中,这些jar应该可以在任何实例的类路径中使用由该用户运行的蚂蚁。
注意你的ant脚本不能假设jar存在,并且jar只在启动时放在类路径上,所以如果脚本定义了一个安装目标来将jar下载到$ USER_HOME / .ant / lib,然后这个目标必须在“separate-ant-session”中运行,然后再次调用以执行依赖于jar的任务。
您可以从此方法中获得的唯一潜在好处是Ant脚本可以从maven和Ant运行。
答案 2 :(得分:0)
可以在classpath
的{{1}}部分设置<tasks>
属性。
例如,
maven-antrun-plugin