java.lang.IllegalAccessError:尝试从类zxy访问类xyz

st-*_*t-h 3 grails groovy

我有一个grails应用程序,如果我通过它启动它,它运行正常

grails run-app
Run Code Online (Sandbox Code Playgroud)

在早期阶段,我已经将该应用程序部署到节点上的tomcat实例,并且没有遇到任何问题.然而,昨天我开始准备生产一切,并设置一个流浪盒来部署整个堆栈.突然发生了一件非常奇怪的事情:

我有一个方法

def checkEmail(String email)
Run Code Online (Sandbox Code Playgroud)

在我的RegisterController中,它调用静态方法

static String normalize(final String email) throws InvalidEmailAddressException
Run Code Online (Sandbox Code Playgroud)

在一个groovy类中,它放在我项目中相应包中的'/ src/groovy'下.

每当调用控制器中的checkEmail方法时,我都会看到以下异常:

2014-04-07 20:19:20,588 [http-bio-8080-exec-6] ERROR errors.GrailsExceptionResolver  - IllegalAccessError occurred when processing request: [GET] /register/checkEmail
tried to access class com.getgrape.core.exception.InvalidEmailAddressException from class com.getgrape.authority.RegisterController. Stacktrace follows:
org.codehaus.groovy.grails.web.servlet.mvc.exceptions.ControllerExecutionException: Executing action [checkEmail] of controller [com.getgrape.authority.RegisterController]  caused exception: Runtime error executing action
    at grails.plugin.springsecurity.web.filter.GrailsAnonymousAuthenticationFilter.doFilter(GrailsAnonymousAuthenticationFilter.java:53)
    at grails.plugin.springsecurity.web.authentication.RequestHolderAuthenticationFilter.doFilter(RequestHolderAuthenticationFilter.java:49)
    at grails.plugin.springsecurity.web.authentication.logout.MutableLogoutFilter.doFilter(MutableLogoutFilter.java:82)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:744)
Caused by: org.codehaus.groovy.grails.web.servlet.mvc.exceptions.ControllerExecutionException: Runtime error executing action
    ... 6 more
Caused by: java.lang.reflect.InvocationTargetException
    ... 6 more
Caused by: java.lang.IllegalAccessError: tried to access class com.getgrape.core.exception.InvalidEmailAddressException from class com.getgrape.authority.RegisterController
    at com.getgrape.authority.RegisterController.checkEmail(RegisterController.groovy:128)
    ... 6 more
Run Code Online (Sandbox Code Playgroud)

InvalidEmailAddressException如下所示,并放在项目中相应包中的'/ src/java'下:

package com.getgrape.core.exception;

class InvalidEmailAddressException extends Exception {

    private static final long serialVersionUID = 1L;

    InvalidEmailAddressException() {
        super();
    }

    InvalidEmailAddressException(String message) {
        super(message);
    }
}
Run Code Online (Sandbox Code Playgroud)

我基本上不知道发生了什么.

  • 我检查了InvalidEmailAddressException的可能重复定义,但找不到任何内容.
  • 我试图重命名Exception,以防我忽略了任何东西或者这可能与另一个库冲突,但这也没有帮助.
  • 我检查了所有的import语句,它们看起来也很好.
  • 如果我完全删除对normalize方法的调用,则错误消失.所以,这必须是关于该方法的东西,它抛出异常.
  • 我试图从方法中删除静态修饰符并通过实例化对象调用它,但这没有什么区别.
  • 我检查了war文件,看看它是否包含InvalidEmailAddressException,它应该在哪里.
  • 我试图将该应用程序部署到刚刚下载的tomcat,但问题仍然存在.所以,它不应该是一个配置问题.
  • 没有编译器错误.

有谁知道可能会发生什么?

java version is: oracle jdk 1.7.0_51
grails: 2.3.7
running on ubuntu 12.04
Run Code Online (Sandbox Code Playgroud)

战争是通过"战争战争"建立起来的,而且在战争开始之前,我一直在运行"grails clean-all".

nim*_*son 7

如果没有public修饰符,该方法仅适用于包类.请参阅http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html.这适用于非公开的异常类.如果您想要全局访问,构造函数和方法也应该是公共的.