Загрузить файл через задачу Ant FTP в Maven - PullRequest
6 голосов
/ 14 октября 2010

Я пытаюсь загрузить файл с помощью задачи Ant.Если я использую Ant напрямую, файл загружается, но если я вызываю задачу ant через Maven (используя 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

Определен ли путь класса Ant отдельно для maven-antrun-plugin или я что-то упустил

Ответы [ 3 ]

5 голосов
/ 14 октября 2010

ant-commons-net.jar явно доступен для Муравья

Да, но Maven и maven-antrun-plugin не используют локальную установку Ant.

Определен ли путь класса Ant отдельно для maven-antrun-plugin или я что-то упустил?

Способ использования задач Ant, не включенных в jar-файл Ant по умолчанию, описан в Использование задач, не включенных в jar-файл Ant по умолчанию (который, безусловно, должен помочь):

Чтобы использовать задачи Ant, не включенные в Ant jar, как Ant по желанию или на заказ Задачи Вам необходимо добавить зависимости необходимо для задачи, чтобы бежать к Плагин classpath и использовать 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>
1 голос
/ 14 октября 2010

Как уже говорил Паскаль, maven-antrun-plugin не использует муравей, указанный вашей переменной окружения $ ANT_HOME , и упомянутая конфигурация, вероятно, является наилучшим способом. делать это последовательно с точки зрения чистого Maven.

Однако jar может храниться в $ USER_HOME / .ant / lib вместо $ ANT_HOME / lib , эти jar-файлы должны быть доступны в classpath для любого экземпляра ant который управляется этим пользователем.

Обратите внимание , что ваш ant-скрипт не может предполагать, что jar-файлы присутствуют, и что jar-файлы помещаются только в путь к классам при запуске, поэтому, если скрипт определяет цель установки для загрузки jar-файлов в $ USER_HOME /.ant/lib, тогда эту цель нужно будет запустить в «отдельный сеанс муравья», прежде чем она будет вызвана снова для выполнения задачи, которая зависит от jar.

Единственное потенциальное преимущество, которое вы можете извлечь из этого подхода, заключается в том, что скрипт Ant может быть запущен из maven и Ant.

0 голосов
/ 14 октября 2010

Существует свойство classpath, которое можно установить в <tasks> разделе maven-antrun-plugin.

Например,

<property name="classpath" refid="maven.compile.classpath"/>
...