jetty启动java web工程报错

eclipse中jetty启动一个maven工程, 报错

Caused by: 
java.lang.IllegalAccessError: class sun.reflect.GeneratedConstructorAccessor6 cannot access its superclass sun.reflect.ConstructorAccessorImpl
    at sun.misc.Unsafe.defineClass(Native Method)
    at sun.reflect.ClassDefiner.defineClass(ClassDefiner.java:63)
    at sun.reflect.MethodAccessorGenerator$1.run(MethodAccessorGenerator.java:399)
    at sun.reflect.MethodAccessorGenerator$1.run(MethodAccessorGenerator.java:396)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.reflect.MethodAccessorGenerator.generate(MethodAccessorGenerator.java:395)
    at sun.reflect.MethodAccessorGenerator.generateConstructor(MethodAccessorGenerator.java:94)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:48)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
    at org.apache.commons.logging.impl.LogFactoryImpl.newInstance(LogFactoryImpl.java:608)

工程中显式依赖了一个rt.jar, 在eclipse中压根就搜索不到GeneratedConstructorAccessor6, 似乎是动态生成的, 反编译rt.jar 得到ConstructorAccessorImpl源码为

package sun.reflect;

import java.lang.reflect.InvocationTargetException;

abstract class ConstructorAccessorImpl
  extends MagicAccessorImpl
  implements ConstructorAccessor
{
  public abstract Object newInstance(Object[] paramArrayOfObject)
    throws InstantiationException, IllegalArgumentException, InvocationTargetException;
}

所以这到底是一个什么错呢?怎么解决呢?

因为工程中显式依赖了一个rt.jar

         <dependency>
             <groupId>com.sun</groupId>
            <artifactId>rt</artifactId>
        </dependency>

删除了该依赖即可解决问题。 但不知为依赖的rt.jar与系统默认的rt.jar有什么区别, 导致使用依赖的rt.jar会报错, 而使用默认的rt.jar却正常。

阅读 6.4k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题