根据官方的Grails医生,Grails2.4.2使用JDK1.6。就我而言,这意味着我可以在运行在JDK1.6上的执行环境中运行所有与Grails2.4.2一起工作的插件。
但是,当我试图将Grails应用程序的war文件部署到运行在JDK1.6上的Glassfish v3.1时,我遇到了与JDK1.6不兼容的依赖关系问题:
Caused by: java.lang.UnsupportedClassVersionError: WEB9032: Class com.nimbusds.jwt.JWT has unsupported major or minor version numbers, which are greater than those found in the Java Runtime Env
ironment version 1.6.0_07
at org.glassfish.web.loader.WebappClassLoader.findClass(WebappClassLoader.java:948)
at org.glassfish.web.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1485)
at org.glassfish.web.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1368)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2427)
at java.lang.Class.getDeclaredMethods(Class.java:1791)
... 55 more在运行dependency-report之后,我发现这个问题是由Security插件的依赖引起的:
+--- org.grails.plugins:spring-security-rest:1.5.1
| \--- net.spy:spymemcached:2.11.6
| \--- com.google.guava:guava-io:r03
| \--- com.google.guava:guava-annotations:r03
| \--- com.google.guava:guava-base:r03
| \--- org.pac4j:pac4j-core:1.6.0
| \--- org.pac4j:pac4j-oauth:1.6.0
| \--- org.apache.commons:commons-lang3:3.1
| \--- org.scribe:scribe:1.3.6
| \--- com.fasterxml.jackson.core:jackson-databind:2.0.6
| \--- com.fasterxml.jackson.core:jackson-annotations:2.0.6
| \--- com.fasterxml.jackson.core:jackson-core:2.0.6
| \--- com.nimbusds:nimbus-jose-jwt:3.9
| \--- net.jcip:jcip-annotations:1.0
| \--- net.minidev:json-smart:1.1.1
| \--- org.bouncycastle:bcprov-jdk15on:1.51
| \--- commons-io:commons-io:2.4引发问题的类com.nimbusds.jwt.JWT是Security插件所依赖的工件nimbus-jose-jwt的一部分。
我觉得这个插件应该是JDK1.6兼容的,因为插件的页面上写着Grails版本: 2.0 > *。这是非常误导的,因为我花了相当长的时间开发,现在我意识到我甚至不能将它部署到生产中。它不是应该说Grails版本: 3.0 > *,还是我在这里误解了什么?
发布于 2015-06-15 13:46:28
我怀疑Nimbus JOSE+JWT (由使用)之所以需要7+,是因为较少版本的7+不支持相同的加密。看看他们的网站,你会看到最低要求:
Nimbus JOSE + JWT库需要Java,并且依赖性最小。
您的假设仅仅因为插件支持Grails 2.0+就意味着它也支持JDK1.6,这只是一个假设,而且显然是不正确的。不需要Grails插件针对特定的Java兼容性级别。
您的开发是在没有使用生产环境中使用的Java的最小目标版本的情况下完成的,这才是真正的罪魁祸首。您应该始终按照目标生产环境的最低要求进行开发和测试。
https://stackoverflow.com/questions/30843518
复制相似问题