应用程序从 java 6 迁移到 java 7

Posted

技术标签:

【中文标题】应用程序从 java 6 迁移到 java 7【英文标题】:application migrate from java6 to java7 【发布时间】:2014-03-06 11:30:37 【问题描述】:

我正在使用一些专有的应用程序服务器(用于 SIP 协议),我们在其中使用嵌入式 tomcat(用于 HTTP 协议)。我们使用 java 1.6u21 运行它。

现在我想使用 java 1.7u51,所以我已经编译了 java1.7u51 上的所有代码。当我启动服务器时,出现以下错误:

org.apache.catalina.LifecycleException: Failed to start component [org.apache.catalina.session.StandardManager[]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5294)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    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: java.lang.IllegalAccessError: tried to access class sun.security.provider.SunEntries from class sun.security.provider.Sun
    at sun.security.provider.Sun.<init>(Sun.java:55)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
    at java.lang.Class.newInstance(Class.java:374)
    at sun.security.jca.ProviderConfig$2.run(ProviderConfig.java:221)
    at sun.security.jca.ProviderConfig$2.run(ProviderConfig.java:206)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.security.jca.ProviderConfig.doLoadProvider(ProviderConfig.java:206)
    at sun.security.jca.ProviderConfig.getProvider(ProviderConfig.java:187)
    at sun.security.jca.ProviderList.getProvider(ProviderList.java:232)
    at sun.security.jca.ProviderList.getService(ProviderList.java:330)
    at sun.security.jca.GetInstance.getInstance(GetInstance.java:157)
    at java.security.cert.CertificateFactory.getInstance(CertificateFactory.java:183)
    at sun.security.pkcs.PKCS7.parseSignedData(PKCS7.java:271)
    at sun.security.pkcs.PKCS7.parse(PKCS7.java:158)
    at sun.security.pkcs.PKCS7.parse(PKCS7.java:126)
    at sun.security.pkcs.PKCS7.<init>(PKCS7.java:108)
    at sun.security.util.SignatureFileVerifier.<init>(SignatureFileVerifier.java:96)
    at java.util.jar.JarVerifier.processEntry(JarVerifier.java:286)
    at java.util.jar.JarVerifier.update(JarVerifier.java:218)
    at java.util.jar.JarFile.initializeVerifier(JarFile.java:345)
    at java.util.jar.JarFile.getInputStream(JarFile.java:412)
    at sun.misc.URLClassPath$JarLoader$2.getInputStream(URLClassPath.java:775)
    at sun.misc.Resource.cachedInputStream(Resource.java:77)
    at sun.misc.Resource.getByteBuffer(Resource.java:160)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:436)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:412)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    at sun.security.jca.ProviderConfig$2.run(ProviderConfig.java:215)
    at sun.security.jca.ProviderConfig$2.run(ProviderConfig.java:206)

我在网上搜索发现java.lang.IllegalAccessError是我们在diff java版本上编译src并在不同版本上运行应用程序时出现的。但就我而言,我已经在 java1.7u51 上编译并运行了应用程序。

任何想法为什么我会遇到这个问题。

仅供参考...我使用的是嵌入式 tomcat 7。

【问题讨论】:

【参考方案1】:

看起来更像是一个 jar 版本问题。如果您使用任何第三方 jar,请确保正确的版本在类路径中,然后重新编译整个应用程序并检查它

【讨论】:

以上是关于应用程序从 java 6 迁移到 java 7的主要内容,如果未能解决你的问题,请参考以下文章

从 Java 6 升级到 Java 7/8 后,Apple 推送无法正常工作

需要从 Java 套接字迁移到我的聊天应用程序的 Xmpp 通信

EJB 远程客户端从 JBoss AS 7.1 迁移到 Wildfly 8.1

EJB远程客户端从JBoss AS 7.1迁移到Wildfly 8.1

从 Tomcat 6 JDK 1.6 迁移到 Tomcat 7 JDK 1.7 会话问题

将大型Java应用程序从MyBatis迁移到ORM