我正在从java 8到11 + gradle 4.5 - > 4.10.3的项目转换下工作,发现对我来说非常奇怪。 gradle采取错误的jar版本。例如。的一部分
gradle依赖
\--- org.springframework.security:spring-security-web:5.1.3.RELEASE -> 4.2.2.RELEASE
Line 407: | +--- org.springframework:spring-beans:4.3.5.RELEASE -> 5.1.4.RELEASE (*)
Line 408: | +--- org.springframework:spring-context:4.3.5.RELEASE -> 5.1.4.RELEASE (*)
Line 409: | +--- org.springframework:spring-core:4.3.5.RELEASE -> 5.1.4.RELEASE (*)
Line 410: | +--- org.springframework:spring-expression:4.3.5.RELEASE -> 5.1.4.RELEASE (*)
Line 411: | \--- org.springframework:spring-web:4.3.5.RELEASE -> 5.1.4.RELEASE (*)
Line 419: | | | +--- com.fasterxml.jackson.core:jackson-databind:2.9.8 -> 2.8.7 (*)
Line 420: | | | +--- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.8 -> 2.8.7
Line 423: | | | +--- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.8 -> 2.8.7
Line 427: | | | \--- com.fasterxml.jackson.module:jackson-module-parameter-names:2.9.8 -> 2.8.7
Line 432: | | | +--- org.apache.tomcat.embed:tomcat-embed-core:9.0.14 -> 8.5.11
Line 433: | | | +--- org.apache.tomcat.embed:tomcat-embed-el:9.0.14 -> 8.5.11
Line 434: | | | \--- org.apache.tomcat.embed:tomcat-embed-websocket:9.0.14 -> 8.5.11
Line 437: | | | +--- javax.validation:validation-api:2.0.1.Final -> 1.1.0.Final
Line 438: | | | +--- org.jboss.logging:jboss-logging:3.3.2.Final -> 3.3.0.Final
spring-security-web:5.1.3.RELEASE - > 4.2.2.RELEASE !!! tomcat-embed-core:9.0.14 - > 8.5.11 !!! tomcat-embed-el:9.0.14 - > 8.5.11 !!! org.apache.tomcat.embed:tomcat-embed-websocket:9.0.14 - > 8.5.11 !!! 和应用程序在运行时失败:
An attempt was made to call the method org.apache.coyote.AbstractProtocol.setAcceptCount(I)V but it does not exist. Its class, org.apache.coyote.AbstractProtocol, is available from the following locations:
jar:file:/C:/yyyyyyyyyyyyyy/bin/java/TxVersionServer/lib/tomcat-embed-core-8.5.11.jar!/org/apache/coyote/AbstractProtocol.class
It was loaded from the following location:
file:/C:/Program%20Files/Dalet/DaletPlus/bin/java/TxVersionServer/lib/tomcat-embed-core-8.5.11.jar
它意味着gradle使用版本X进行编译,将版本Y用于运行时,为什么编译没有失败?方法只存在于版本9中。编译必须失败,不是吗?我怎么能避免呢?看起来我也需要在我的gradle中指定3d party依赖项的版本,例如:A取决于B,B取决于C,我需要写A:A取决于B而A取决于C.我测试了它这项工作,但它看起来非常非常错误的方式。任何想法如何解决没有这种版本跳跃的依赖关系。
这个Gradle版本似乎不支持Java 11.请参阅问题7835
您必须升级到Gradle 5.0才能使用Java 11,请参阅release notes。
有些提到Gradle itself will run with Java 11但不是为了建立自己。它看起来有点令人困惑,但该发行版清楚地表明Java 11支持仅来自Gradle 5.0+