Maven Antrun с последовательным Ant-Antive не выполняется
-
09-10-2019 - |
Вопрос
У нас есть специальная рутина для взорвании файлов в подпапке в расширениях, которые будут скопированы и JARED в однные файлы расширения. Для этого особого подхода я хотел использовать maven-antrun-plugin
, Для последовательной итерации и упаковки банок через диолл нам нужна библиотека Ant-And.
Предстоящий конфигурация плагинов не удается с ошибкой. Что я заблудился? Спасибо.
Конфигурация плагина
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.6</version>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target>
<for param="extension">
<path>
<dirset dir="${basedir}/src/main/webapp/WEB-INF/resources/extensions/">
<include name="*" />
</dirset>
</path>
<sequential>
<basename property="extension.name" file="${extension}" />
<echo message="Creating JAR for extension '${extension.name}'." />
<jar destfile="${basedir}/target/extension-${extension.name}-1.0.0.jar">
<zipfileset dir="${extension}" prefix="WEB-INF/resources/extensions/${extension.name}/">
<include name="**/*" />
</zipfileset>
</jar>
</sequential>
</for>
</target>
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>ant-contrib</groupId>
<artifactId>ant-contrib</artifactId>
<version>1.0b3</version>
<exclusions>
<exclusion>
<groupId>ant</groupId>
<artifactId>ant</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.ant</groupId>
<artifactId>ant-nodeps</artifactId>
<version>1.8.1</version>
</dependency>
</dependencies>
</plugin>
Ошибка
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-antrun-plugin:1.6:run (default) on project extension-platform: An Ant BuildException has occured: Problem: failed to create task or type for
[ERROR] Cause: The name is undefined.
[ERROR] Action: Check the spelling.
[ERROR] Action: Check that any custom tasks/types have been declared.
[ERROR] Action: Check that any <presetdef>/<macrodef> declarations have taken place.
[ERROR] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
Решение
Похоже, ты скучаешь taskdef. это нужно Объявите антрологические задачи, Так что этот муравей знает о них, поэтому эта часть сообщения об ошибке:
Problem: failed to create task or type for
(Возможно, было бы немного понятно, если неудачная задача - 'for'
- цитируются.)
Один из способов добавления TaskDef - это немедленно вставить его до for
петля:
<target>
<taskdef resource="net/sf/antcontrib/antlib.xml"
classpathref="maven.plugin.classpath" />
<for param="extension">
...
Другие советы
Поэтому я потратил впустую как минимум на один час, чтобы найти ошибку немного подсказки ниже ...
Я использую Maven3 и остальное, как описано выше, но я должен использовать maven.dependency.classpath
вместо maven.plugin.classpath
Действительно В противном случае Maven не найдет сложные задачи. Надеюсь, это кто-нибудь поможет.
После трачения 2 часа и чтение слишком много ответов, это то, что мне нужно проверить
Я напечатал все классы Maven, используя это
<property name="compile_classpath" refid="maven.compile.classpath"/>
<property name="runtime_classpath" refid="maven.runtime.classpath"/>
<property name="test_classpath" refid="maven.test.classpath"/>
<property name="plugin_classpath" refid="maven.plugin.classpath"/>
<echo message="compile classpath: ${compile_classpath}"/>
<echo message="runtime classpath: ${runtime_classpath}"/>
<echo message="test classpath: ${test_classpath}"/>
<echo message="plugin classpath: ${plugin_classpath}"/>
и проверено, какая класса содержит файл antrib jar. Так что я изменил classpathhref
к maven.runtime.classpath
от maven.plugin.classpath
Отказ Так что мой taskdef
является
<taskdef resource="net/sf/antcontrib/antcontrib.properties" classpathref="maven.runtime.classpath" />
и зависимости
<dependency>
<groupId>ant-contrib</groupId>
<artifactId>ant-contrib</artifactId>
<version>1.0b3</version>
<exclusions>
<exclusion>
<groupId>ant</groupId>
<artifactId>ant</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.ant</groupId>
<artifactId>ant-nodeps</artifactId>
<version>1.8.1</version>
</dependency>
Я слишком потратил несколько часов на этом, потому что Antcontrib for
Задача не может быть найдена.
Наконец, я узнал, что for
задача не определена в antcontrib.properties
, но в antlib.xml
!
antcontrib.properties
представляет собой Ant 1.6 способом делать вещи - современный способ использовать antlib.xml
.
Итак, это Maven 3.5., Муравей 1.8, Рабочий пример:
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<dependencies>
<dependency>
<groupId>ant-contrib</groupId>
<artifactId>ant-contrib</artifactId>
<version>1.0b3</version>
<exclusions>
<exclusion>
<groupId>ant</groupId>
<artifactId>ant</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<execution>
<id>deploy_to_distrib_folder</id>
<phase>package</phase>
<configuration>
<target>
<taskdef resource="net/sf/antcontrib/antlib.xml" />
<macrodef name="deploy_extra_dir">
<attribute name="dir" />
<sequential>
<basename property="basename" file="@{dir}" />
<sync todir="${outputDir}/${basename}">
<fileset dir="@{dir}" />
</sync>
<var name="basename" unset="true" />
</sequential>
</macrodef>
<for param="dir">
<path>
<dirset dir="${project.build.directory}/maven-shared-archive-resources" includes="*" />
</path>
<sequential>
<deploy_extra_dir dir="@{dir}" />
</sequential>
</for>
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</plugin>
Надеюсь это поможет!