【发布时间】:2015-05-06 01:41:24
【问题描述】:
我正在处理一个 Restlet 应用程序问题,并认为最好设置一个包含应用程序缩减版本的 Github 存储库以进行测试。然而,这从来没有那么容易......
存储库在这里:https://github.com/morungos/restlet-spring-static-files
基本上,问题是每当我尝试使用mvn jetty:run-war 运行它(我实际上需要这样做来测试restlet 问题)时,都会得到以下回溯:
java.lang.IncompatibleClassChangeError: class org.springframework.cglib.core.DebuggingClassWriter has interface org.springframework.asm.ClassVisitor as super class
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:455)
at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:367)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:415)
at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:377)
at org.springframework.cglib.core.DefaultGeneratorStrategy.getClassVisitor(DefaultGeneratorStrategy.java:30)
有趣的部分是原始应用程序——即使我让它使用完全相同的pom.xml,对于相同的命令也没有显示相同的问题。 mvn jetty:run 似乎都很好,但是 Restlet 问题需要一个 war 文件来测试。
现在我已经看到了这个问题,它通常是 ASM/CGLIB 冲突,当我检查依赖项时,Jetty 和 Spring 都使用不同的 ASM 系统,但我想知道在哪里或如何设置依赖项以使其正确工作。即使我可以,我也无法弄清楚为什么它可以在一个应用程序中工作,而不是在一个稍微小一点的版本中(遗憾的是我还不能展示)。
关于如何解决这个问题的任何想法?我尝试向导致问题的 Jetty 依赖项添加排除项(jetty-annotations),但后来 Jetty 严重失败,因此显然是必需的。
【问题讨论】:
标签: java spring maven jetty maven-jetty-plugin