SBT传递依赖性解决冲突

时间:2017-04-14 15:44:28

标签: scala maven sbt ivy dependency-resolution

我在SBT解决传递依赖关系时遇到问题。

错误是:

java.lang.NoSuchMethodError: com.vividsolutions.jts.index.strtree.STRtree.queryBoundary()Ljava/util/List

Geospark正在使用引用版本jts2geojson中的jts的https://github.com/bjornharrtell/jts2geojson/blob/master/pom.xml 1.14,但这被排除在外并且他们使用自定义工件作为替代。它被称为JTSPlus,它仍然存在于com.vividsolutions命名空间中,并提供了一些其他方法,即上面缺少的方法。

最新的geotools 17在版本jts中使用1.13 https://github.com/geotools/geotools/blob/master/pom.xml#L752-L754

我需要com.vividsolution.jts 的地理工具中替换org.datasyslab.jtsplus,这提供了额外但必需的功能,我该如何实现这一目标?

在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"
)

1 个答案:

答案 0 :(得分:0)

评论中提到的{p> Why is SBT NOT excluding these libraries despite using excludes?需要使用allDependencies而不是libraryDependencies。我认为由于传递性问题,这是必需的。