从maven-antrun-plugin调用ant脚本时出现IllegalAccessError错误

4
我刚把Maven从2.0.9升级到2.2.1,运行maven构建时遇到以下异常:
INFO] [antrun:run {execution: precompile-jsp}]
[INFO] Executing tasks
default:
jspc: [mkdir] Created dir: C:\builds\trunk\webapps\vyre_portlets\WEB-INF\jsp_src [INFO] ------------------------------------------------------------------------ [ERROR] BUILD ERROR [INFO] ------------------------------------------------------------------------ [INFO] An Ant BuildException has occured: The following error occurred while executing this line: C:\unify\trunk\portlets\build-jsps.xml:87: The following error occurred while executing this line: C:\unify\trunk\portlets\build-jsps.xml:7: java.lang.IllegalAccessError: tried to access method org.apache.tools.ant.launch.Locator.decodeUri(Ljava/lang/String;)Ljava/lang/String; from class org.apache.tools.ant.AntClassLoader
build-jsps.xml ant脚本在正在构建的Maven Web应用程序中运行org.apache.jasper.JspC任务来预编译JSP。这在Maven 2.0.9上运行良好。Google给出了一堆人问类似的问题,但没有答案。有人遇到过这个问题并知道如何解决吗?或者只是想知道为什么会出现IllegalAccessError?
2个回答

3
尝试显式设置"maven-antrun-plugin"的ANT依赖。
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-antrun-plugin</artifactId>
    <executions>
        .... 
    </executions>
    <dependencies>
        <dependency>
               <groupId>org.apache.ant</groupId>
               <artifactId>ant-nodeps</artifactId>
               <version>1.7.0</version>                                   
        </dependency>
    </dependencies>
</plugin>

请注意,在Maven的公共存储库中,有多个地方可以找到ANT:
  1. <groupId>org.apache.ant</groupId>
  2. <groupId>ant</groupId>
(2)是旧版本,请使用(1)。

太好了!我终于找到为什么这个对我不起作用的原因了。失败的ant调用在一个项目的子项目中,该项目还执行ant调用。看来maven每次执行只会为插件设置一次依赖关系,因此您必须在构建中的第一次使用中进行设置。 - Sindri Traustason
我需要为每个项目更改每个POM吗? - A.C
1
@UmReeta:如果您有多模块POM结构,那么我认为您只能在“父”POM中完成。 - Timour

0
在Maven 2.2.x中,许多插件的版本已经更新,如果您使用-X运行构建,您将看到antrun-plugin的哪个版本已被使用。如果这些是不同的版本,则可能正在使用不同版本的org.apache.tools.ant.launch.Locator。查看Locator的更改历史记录,decodeUri方法是在Ant 1.7中引入的,并进行了一些调整,尽管没有明显导致问题的内容。
您能发布一个最小的pom和ant配置,以显示错误吗?这将有助于诊断问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接