2010-12-06 5 views
6

У нас есть специальная подпрограмма для взорвания файлов в подпапке в расширениях, которые будут скопированы и объединены в отдельные файлы расширений. Для этого специального подхода я хотел использовать maven-antrun-plugin, для последовательной итерации и упаковки jar через dirset, нам нужна библиотека ant-contrib.Maven antrun с последовательным ant-contrib не удается запустить

Неисправность предстоящей конфигурации плагина с ошибкой. Что я неправильно сконфигурировал? Спасибо.

конфигурации Plugin

<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 

ответ

9

Похоже, вы пропустили taskdef, что необходимо для declare the ant-contrib tasks, так что Ant знает о них, следовательно, эта часть сообщение об ошибке:

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"> 
    ... 
+0

Спасибо, это работает отлично подходит для меня. Я также пробовал это, но использовал неправильную ссылку на classpath. – codevour 2010-12-07 08:59:55

10

Поэтому я потратил по крайней мере один час, чтобы найти ошибку небольшой намек ниже ...

Я использую maven3, а остальное, как описано выше, но я должен использовать maven.dependency.classpath вместо maven.plugin.classpath ! В противном случае maven не найдет задачи contrib. Надеюсь, это поможет кому угодно.

0

Потратив 2 часа и читать слишком много ответов, это то, что мне нужно проверить

http://www.thinkplexx.com/learn/howto/maven2/plugins/could-not-load-definitions-from-resource-antlib-xml-understanding-the-problem-and-fix-worklow

Я распечатал все 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 file. Поэтому я изменил 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>