通过Maven中的Ant FTP任务上传文件

时间:2010-10-14 16:34:55

标签: ant maven-2 ftp apache-commons-net

我正在尝试使用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类路径,还是我遗漏了什么?

3 个答案:

答案 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