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

时间:2009-08-24 10:58:59

标签: java jsp maven-2 ant build-process

我刚刚将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脚本运行org.apache.jasper.JspC任务,以在maven正在构建的webapp中预编译JSP。这与Maven 2.0.9一起工作正常。

谷歌给了很多人提出类似的问题,但没有答案。有没有人碰到这个并知道如何解决这个问题?或者甚至只是为什么我得到了IllegalAccessError?

2 个答案:

答案 0 :(得分: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>
  3. (2)是旧的,所以使用(1)代替

答案 1 :(得分:0)

在Maven 2.2.x中,许多插件的版本已经更新,如果你使用-X运行构建,你会看到使用了什么版本的antrun-plugin。如果这些版本不同,则可能使用的是不同版本的org.apache.tools.ant.launch.Locator。查看Locator的更改历史记录,在Ant 1.7中引入了decodeUri方法,并且已经进行了几次调整,但没有任何可能导致问题的原因。

你能发布一个显示错误的最小pom和ant配置吗?这有助于诊断问题。