Загрузка файла через задачу Ant FTP в Maven
Я пытаюсь загрузить файл с помощью 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 ответов
ant-commons-net.jar
явно доступен для Ant
да, но Maven и maven-antrun-plugin
не использует локальную установку Ant.
путь к классам Ant определяется отдельно для
maven-antrun-plugin
, или я что-то пропустила?
способ использования задач Ant, не включенных в банку Ant по умолчанию, задокументирован в использование задач, не включенных в банку Ant по умолчанию (что определенно должно помочь):
использовать Ant задач, не включенные в Ant jar, как Ant необязательный или пользовательский задачи вам нужно добавить зависимости необходимо для выполнения задачи plugin 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>
Как упоминал Паскаль,Maven-antrun-plugin не использует муравей, указанный вашим $ANT_HOME переменная окружения и конфигурация, о которой он упомянул, вероятно, лучший способ сделать это последовательно с чистой точки зрения maven.
однако банку можно хранить в $USER_HOME/.ant / lib вместо $ANT_HOME / lib, эти банки должны быть доступны в пути к классам для любого экземпляра ant, который запускается этот пользователь.
Примечание что ваш сценарий ant не может предположить, что банки присутствуют, и что банки размещаются только на пути к классам при запуске, поэтому, если сценарий определяет цель установки для загрузки банок в $USER_HOME/.ant / lib, то эта цель должна быть запущена в "отдельном-ant-сеансе", прежде чем и вызывается снова для выполнения задачи, которая зависит от jar.
единственное потенциальное преимущество, которое вы можете извлечь из этого подхода, заключается в том, что Сценарий Ant может выполняться из maven и Ant.
есть classpath
имущество, которое может быть установлено в на maven-antrun-plugin
.
например,
<property name="classpath" refid="maven.compile.classpath"/>