6

Ant タスクを使用してファイルをアップロードしようとしています。Ant を直接使用するとファイルがアップロードされますが、Maven 経由で ( を使用してmaven-antrun-plugin) Ant タスクを呼び出すと、次のエラーが発生します。

Ant BuildException has occurred: この行の実行中に次のエラーが発生しました:

/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

Ant クラスパスは maven-antrun-plugin 用に個別に定義されていますか、それとも何か不足していますか?

4

3 に答える 3

5

ant-commons-net.jarAnt で明らかに利用可能

はい。ただし、Maven と はmaven-antrun-pluginローカルの Ant インストールを使用していません。

Ant クラスパスは に対して個別に定義されてmaven-antrun-pluginいますか、それとも何か不足していますか?

Ant のデフォルト jar に含まれていない Ant タスクを使用する方法は、Ant のデフォルト jar に含まれていないタスクの使用に記載されています(これは間違いなく役立ちます)。

Ant jar に含まれていない Ant タスク (Ant オプションまたはカスタム タスクなど)を使用するには、タスクを実行するために必要な依存関係をプラグイン クラスパスに追加し、必要に応じて maven.plugin.classpath参照を使用する必要があります。

<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>
于 2010-10-14T19:08:47.740 に答える
1

Pascalが述べたように、maven-antrun-pluginは$ ANT_HOME環境変数で指定されたantを使用していません。彼が言及した構成は、純粋なMavenの観点から一貫してそれを行うためのおそらく最良の方法です。

ただし、jarは$ ANT_HOME/ libではなく$USER_HOME/ .ant / libに格納できます。これらのjarは、そのユーザーが実行するantのインスタンスのクラスパスで使用できる必要があります。

antスクリプトは、jarが存在することを想定できず、jarは起動時にクラスパスにのみ配置されるため、スクリプトがjarを$ USER_HOME / .ant / libにダウンロードするセットアップターゲットを定義している場合、このターゲットはjarに依存するタスクを実行するために、前に「separate-ant-session」で実行する必要があり、再度呼び出されます。

このアプローチから得られる唯一の潜在的な利点は、AntスクリプトをMavenとAntから実行できることです。

于 2010-10-14T19:43:57.427 に答える
0

のセクションでclasspath設定できるプロパティがあります。<tasks>maven-antrun-plugin

例えば、

<property name="classpath" refid="maven.compile.classpath"/>
于 2010-10-14T17:29:17.557 に答える