项目背景技术:
jdk 1.6
spring 3.x
tomcat 6
dubbo
一般都是包冲突, 或者包缺失
通过 gradle dependencies --configure compile 或者 mvn dependency:tree 可以看到项目的依赖树
方便查找
javassist 包冲突,运行报错:java.io.IOException: invalid constant type: 15
将 javassist 包升级到 18 以上
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.23.1-GA</version>
</dependency>
注意, javassist 有2个group,一个是 "javassist",一个是 "org.javassist"
要使用 "org.javassist", 需要排除掉另一个
比如:
for gradle
compile (group: 'org.scannotation', name: 'scannotation', version:'1.0.3'){
exclude module:"javassist"
}
for maven
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.5.3</version>
<exclusions>
<exclusion>
<artifactId>spring</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
</exclusions>
</dependency>
然后遇到问题
java.lang.NoClassDefFoundError: javax/xml/soap/SOAPException
简单讲就是某些 jar 包在jdk中默认不集成了, 比如sun系的
其他解释可以在这里找到:
https://stackoverflow.com/questions/48626824/java-lang-noclassdeffounderror-javax-xml-soap-soapexception
https://stackoverflow.com/questions/43574426/how-to-resolve-java-lang-noclassdeffounderror-javax-xml-bind-jaxbexception-in-j
https://www.concretepage.com/questions/531
办法就是添加下下面的包
compile 'javax.xml.bind:jaxb-api:2.2.11'
compile 'com.sun.xml.bind:jaxb-impl:2.1.2'
compile 'javax.xml.soap:javax.xml.soap-api:2.2.11'
然后又想将 spring 升级到 5.x
configurations.all {
resolutionStrategy {
// javassist 的版本强制指定为 3.23.1
force 'org.javassist:javassist:3.23.1-GA'
// // 将依赖中的spring包,升级为 4.0
eachDependency { DependencyResolveDetails details ->
if (details.requested.group == 'org.springframework' ) {
details.useVersion '4.0.0.RELEASE'
}
}
}
}