SBT 传递依赖解决冲突
SBT transitive dependency resolution conflict
我在 SBT 解析传递依赖时遇到问题。
错误是:
java.lang.NoSuchMethodError: com.vividsolutions.jts.index.strtree.STRtree.queryBoundary()Ljava/util/List
Geospark
使用 jts2geojson
https://github.com/bjornharrtell/jts2geojson/blob/master/pom.xml
引用版本 1.14
中的 jts,但这被排除在外,他们使用自定义工件作为替代。它被称为 JTSPlus
,它仍然存在于 com.vividsolutions
命名空间中,并提供了一些额外的方法,即上面缺少的方法。
最新的geotools 17
正在使用jts
版本1.13
https://github.com/geotools/geotools/blob/master/pom.xml#L752-L754
我需要用 org.datasyslab.jtsplus
替换 geotools 中的 com.vividsolution.jts
,它提供了额外但必需的功能,我该如何实现?
在 maven 中:
<dependency>
<groupId>org. geotools </groupId>
<artifactId> geotools </artifactId>
<version>YOURVERSION</version>
<exclusions>
<exclusion>
<groupId>com.vividsolutions</groupId>
<artifactId>jts</artifactId>
</exclusion>
</exclusions>
</dependency>
应该可以,但对于 SBT 使用
libraryDependencies ++= Seq(
"org.geotools" % "gt-main" % geotools,
"org.geotools" % "gt-arcgrid" % geotools,
"org.geotools" % "gt-process-raster" % geotools)
.map(_.excludeAll(
ExclusionRule(organization = "com.vividsolution", artifact = "jts")
))
没有修复它。实际上,当使用 dependencyGraph 时,我可以看到 SBT 仍在将 1.13 版本中的常规 jts 应用到整个项目。
如何修复依赖关系以正确排除原始 JTS 版本?
我的build.sbt长得像
lazy val geotools = "17.0"
resolvers += "osgeo" at "http://download.osgeo.org/webdav/geotools"
resolvers += "boundless" at "http://repo.boundlessgeo.com/main"
resolvers += "imageio" at "http://maven.geo-solutions.it"
resolvers += Resolver.mavenLocal
libraryDependencies ++= Seq(
"org.geotools" % "gt-main" % geotools,
"org.geotools" % "gt-arcgrid" % geotools,
"org.geotools" % "gt-process-raster" % geotools)
.map(_.excludeAll(
ExclusionRule(organization = "com.vividsolution", artifact = "jts")
))
libraryDependencies ++= Seq(
"org.datasyslab" % "geospark" % "0.6.1-snapshot"
)
Why is SBT NOT excluding these libraries despite using excludes?在评论中提到需要使用allDependencies
而不是libraryDependencies
。由于传递问题,我认为这是必需的。
我在 SBT 解析传递依赖时遇到问题。
错误是:
java.lang.NoSuchMethodError: com.vividsolutions.jts.index.strtree.STRtree.queryBoundary()Ljava/util/List
Geospark
使用 jts2geojson
https://github.com/bjornharrtell/jts2geojson/blob/master/pom.xml
引用版本 1.14
中的 jts,但这被排除在外,他们使用自定义工件作为替代。它被称为 JTSPlus
,它仍然存在于 com.vividsolutions
命名空间中,并提供了一些额外的方法,即上面缺少的方法。
最新的geotools 17
正在使用jts
版本1.13
https://github.com/geotools/geotools/blob/master/pom.xml#L752-L754
我需要用 org.datasyslab.jtsplus
替换 geotools 中的 com.vividsolution.jts
,它提供了额外但必需的功能,我该如何实现?
在 maven 中:
<dependency>
<groupId>org. geotools </groupId>
<artifactId> geotools </artifactId>
<version>YOURVERSION</version>
<exclusions>
<exclusion>
<groupId>com.vividsolutions</groupId>
<artifactId>jts</artifactId>
</exclusion>
</exclusions>
</dependency>
应该可以,但对于 SBT 使用
libraryDependencies ++= Seq(
"org.geotools" % "gt-main" % geotools,
"org.geotools" % "gt-arcgrid" % geotools,
"org.geotools" % "gt-process-raster" % geotools)
.map(_.excludeAll(
ExclusionRule(organization = "com.vividsolution", artifact = "jts")
))
没有修复它。实际上,当使用 dependencyGraph 时,我可以看到 SBT 仍在将 1.13 版本中的常规 jts 应用到整个项目。
如何修复依赖关系以正确排除原始 JTS 版本?
我的build.sbt长得像
lazy val geotools = "17.0"
resolvers += "osgeo" at "http://download.osgeo.org/webdav/geotools"
resolvers += "boundless" at "http://repo.boundlessgeo.com/main"
resolvers += "imageio" at "http://maven.geo-solutions.it"
resolvers += Resolver.mavenLocal
libraryDependencies ++= Seq(
"org.geotools" % "gt-main" % geotools,
"org.geotools" % "gt-arcgrid" % geotools,
"org.geotools" % "gt-process-raster" % geotools)
.map(_.excludeAll(
ExclusionRule(organization = "com.vividsolution", artifact = "jts")
))
libraryDependencies ++= Seq(
"org.datasyslab" % "geospark" % "0.6.1-snapshot"
)
Why is SBT NOT excluding these libraries despite using excludes?在评论中提到需要使用allDependencies
而不是libraryDependencies
。由于传递问题,我认为这是必需的。