我正在尝试从Java 8版本升级到一个项目,并且在我手动添加JAXB依赖项后,我在构建时间遇到了以下错误:
'dependencyManagement.dependencies.dependency.systemPath' for com.sun:tools:jar must specify an absolute path but is ${tools.jar} in com.sun.xml.bind:jaxb-impl:2.2.11
我正在使用gradle,所以我添加了以下依赖项:
implementation "javax.xml.bind:jaxb-api:2.2.11"
implementation "com.sun.xml.bind:jaxb-core:2.2.11"
implementation "com.sun.xml.bind:jaxb-impl:2.2.11"
implementation "javax.activation:activation:1.1.1"
我试图搜索Jaxb POM来搜索指定它的属性(tools.jar
(但找不到任何东西的位置。
我在做什么错?
仅使用2.3 版本的 jaxb-...
伪像。如果我们检查jaxb-parent-2.3.0.pom
,则我们发现它不再使用<systemPath>${tools.jar}</systemPath>
您可以使用 ./gradlew dependencies
查找导致错误的jaxb依赖性的父依赖。
然后将该依赖性升级到最新。
例如修复错误:
Errors occurred while build effective model from /home/gayanw/.gradle/caches/modules-2/files-2.1/com.sun.xml.bind/jaxb-osgi/2.2.10/c926a537af564ec047ec6308df1d0d2a03364a86/jaxb-osgi-2.2.10.pom:
'dependencyManagement.dependencies.dependency.systemPath' for com.sun:tools:jar must specify an absolute path but is ${tools.jar} in com.sun.xml.bind:jaxb-osgi:2.2.10
$ ./gradlew dependencies
| --- io.rest-assured:xml-path:3.0.2 -> 3.3.0
| +--- org.codehaus.groovy:groovy-xml:2.4.15 -> 2.5.9 (*)
| +--- org.codehaus.groovy:groovy:2.4.15 -> 2.5.9
| +--- io.rest-assured:rest-assured-common:3.3.0 (*)
| +--- org.apache.commons:commons-lang3:3.4
| +--- org.ccil.cowan.tagsoup:tagsoup:1.2.1
| +--- javax.xml.bind:jaxb-api:2.2.12 -> 2.3.1
| | --- javax.activation:javax.activation-api:1.2.0
| +--- com.sun.xml.bind:jaxb-osgi:2.2.10
在我的情况下,jaxb-osgi
由io.rest-assured:xml-path
引入。因此,升级依赖性应解决。
testImplementation 'io.rest-assured:xml-path:4.2.0'
现在有同样的问题,我只是升级了我的gradle
implementation 'io.rest-assured:rest-assured:4.3.2'
implementation 'io.rest-assured:json-path:4.3.2'
compile group: 'com.sun.xml.bind', name: 'jaxb-osgi', version: '2.3.2'
错误消失了编辑:对于我的项目,如果我使用了更多更新的Jaxb-Osgi版本,则它将无法使用(错误消失,但测试停止运行(
我发现添加
ext['rest-assured.version'] = '4.3.1'
到您的build.gradle文件将覆盖带有Spring-Cloud版本的版本,并且下载的所有版本的io.rest-assured:**
JARS都将具有相同的数字