我正在尝试groovy的ant任务,并不断地遇到这种奇怪的版本错配。我只想实现groovy任务从外部文件执行代码。
我的设置:
档案:
C:\tmp\groovy-ant-test\
|_pom.xml
|_task.groovypom.xml
<?xml version="1.0"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>test</groupId>
<artifactId>test</artifactId>
<version>0.0.1-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.8</version>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target>
<property name="compile_classpath" refid="maven.compile.classpath" />
<echo message="compile classpath: ${compile_classpath}" />
<taskdef resource="org/codehaus/groovy/antlib.xml">
<classpath refid="maven.compile.classpath"/>
</taskdef>
<groovy>
println "Hello from pom.xml!"
</groovy>
<groovy src="task.groovy" />
</target>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.apache.groovy</groupId>
<artifactId>groovy</artifactId>
<version>4.0.6</version>
</dependency>
<dependency>
<groupId>org.apache.groovy</groupId>
<artifactId>groovy-ant</artifactId>
<version>4.0.6</version>
</dependency>
<dependency>
<groupId>org.apache.ant</groupId>
<artifactId>ant</artifactId>
<version>1.10.12</version>
</dependency>
</dependencies>
</project>task.groovy
println "Hello from task.groovy!"我的期望:
[...]
[INFO] --- maven-antrun-plugin:1.8:run (default) @ test ---
[INFO] Executing tasks
main:
[echo] compile classpath: C:\tmp\groovy-ant-test\target\classes;M:\org\apache\groovy\groovy\4.0.6\groovy-4.0.6.jar;M:\org\apache\groovy\groovy-ant\4.0.6\groovy-ant-4.0.6.jar;M:\org\apache\ant\ant-junit\1.10.12\ant-junit-1.10.12.jar;M:\org\apache\ant\ant-launcher\1.10.12\ant-launcher-1.10.12.jar;M:\org\apache\ant\ant-antlr\1.10.12\ant-antlr-1.10.12.jar;M:\org\apache\groovy\groovy-groovydoc\4.0.6\groovy-groovydoc-4.0.6.jar;M:\org\apache\ant\ant\1.10.12\ant-1.10.12.jar;C:\Program Files\OpenJDK\8.322.06.1\lib\tools.jar
Hello from pom.xml!
Hello from task.groovy!
[...]我的结果:
[INFO] --- maven-antrun-plugin:1.8:run (default) @ test ---
[INFO] Executing tasks
main:
[echo] compile classpath: C:\tmp\groovy-ant-test\target\classes;M:\org\apache\groovy\groovy\4.0.6\groovy-4.0.6.jar;M:\org\apache\groovy\groovy-ant\4.0.6\groovy-ant-4.0.6.jar;M:\org\apache\ant\ant-junit\1.10.12\ant-junit-1.10.12.jar;M:\org\apache\ant\ant-launcher\1.10.12\ant-launcher-1.10.12.jar;M:\org\apache\ant\ant-antlr\1.10.12\ant-antlr-1.10.12.jar;M:\org\apache\groovy\groovy-groovydoc\4.0.6\groovy-groovydoc-4.0.6.jar;M:\org\apache\ant\ant\1.10.12\ant-1.10.12.jar;C:\Program Files\OpenJDK\8.322.06.1\lib\tools.jar
Hello from pom.xml!
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.425 s
[INFO] Finished at: 2022-10-24T13:49:36+02:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-antrun-plugin:1.8:run (default) on project test: An Ant BuildException has occured: java.lang.NoSuchMethodError: org.apache.tools.ant.filters.util.ChainReaderHelper.<init>(Lorg/apache/tools/ant/Project;Ljava/io/Reader;Ljava/lang/Iterable;)V
[ERROR] around Ant part ...<groovy src="task.groovy"/>... @ 10:30 in C:\tmp\groovy-ant-test\target\antrun\build-main.xml来自-X选项的附加堆栈跟踪部件:
Caused by: java.lang.NoSuchMethodError: org.apache.tools.ant.filters.util.ChainReaderHelper.<init>(Lorg/apache/tools/ant/Project;Ljava/io/Reader;Ljava/lang/Iterable;)V
at org.codehaus.groovy.ant.Groovy.readCommandFromReader (Groovy.java:432)maven类路径包含groovy:4.0.6,它依赖于我显式提供的ant:1.10.12。ant中的org.apache.tools.ant.filters.util.ChainReaderHelper :1.10.12有一个带有请求的args的构造函数。
我不认为在类路径上出现错误版本的可能性,就像依赖关系:tree显示的那样
[INFO] test:test:jar:0.0.1-SNAPSHOT
[INFO] +- org.apache.groovy:groovy:jar:4.0.6:compile
[INFO] +- org.apache.groovy:groovy-ant:jar:4.0.6:compile
[INFO] | +- org.apache.ant:ant-junit:jar:1.10.12:compile
[INFO] | +- org.apache.ant:ant-launcher:jar:1.10.12:compile
[INFO] | +- org.apache.ant:ant-antlr:jar:1.10.12:compile
[INFO] | \- org.apache.groovy:groovy-groovydoc:jar:4.0.6:compile
[INFO] \- org.apache.ant:ant:jar:1.10.12:compile
[INFO] \- com.sun:tools:jar:1.8.0:system是否有任何失败的原因,我没有看到,或我是否错配置了什么?
发布于 2022-10-24 13:42:48
在对antrun插件进行了一些调试之后,我发现maven-antrun-plugin本身提供了错误的ant版本(本例中为1.9.4)。
变到
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>3.1.0</version>导致期望的输出。
https://stackoverflow.com/questions/74180809
复制相似问题