我刚刚将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?答案 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的多个位置:
<groupId>org.apache.ant</groupId>
<groupId>ant</groupId>
(2)是旧的,所以使用(1)代替
答案 1 :(得分:0)
在Maven 2.2.x中,许多插件的版本已经更新,如果你使用-X运行构建,你会看到使用了什么版本的antrun-plugin。如果这些版本不同,则可能使用的是不同版本的org.apache.tools.ant.launch.Locator。查看Locator的更改历史记录,在Ant 1.7中引入了decodeUri方法,并且已经进行了几次调整,但没有任何可能导致问题的原因。
你能发布一个显示错误的最小pom和ant配置吗?这有助于诊断问题。