項(xiàng)目背景技術(shù):
jdk 1.6
spring 3.x
tomcat 6
dubbo
一般都是包沖突, 或者包缺失
通過 gradle dependencies --configure compile 或者 mvn dependency:tree 可以看到項(xiàng)目的依賴樹
方便查找
javassist 包沖突吱七,運(yùn)行報(bào)錯(cuò):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個(gè)group,一個(gè)是 "javassist"孔飒,一個(gè)是 "org.javassist"
要使用 "org.javassist", 需要排除掉另一個(gè)
比如:
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中默認(rèn)不集成了, 比如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 的版本強(qiáng)制指定為 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'
}
}
}
}