SBT транзитивный конфликт разрешения зависимостей

У меня есть проблема в SBT разрешении транзитивных зависимостей.

Ошибка:

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

Geospark использует jts2geojsonhttps://github.com/bjornharrtell/jts2geojson/blob/master/pom.xml какие ссылки JTS в версии 1.14, но это исключено, и они используют собственный артефакт в качестве замены. Это называется JTSPlus который до сих пор живет в com.vividsolutions namespace и предоставляет некоторые дополнительные методы, т.е. тот, который отсутствует выше.

Последний geotools 17 использует jts в версии 1.13 https://github.com/geotools/geotools/blob/master/pom.xml#L752-L754

Мне нужно заменить com.vividsolution.jts из геоинструментов с org.datasyslab.jtsplus который предлагает дополнительную, но необходимую функциональность, как мне этого добиться?

В мавене:

<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 все еще применяет обычные jts в версии 1.13 ко всему проекту.

Как я могу исправить зависимости, чтобы правильно исключить исходную версию 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 ответ

Решение

Почему SBT НЕ исключает эти библиотеки, несмотря на использование исключений? упоминается в комментариях, что allDependencies вместо libraryDependencies должен быть использован. Я думаю, что это требуется из-за переходных проблем.

Другие вопросы по тегам