sbt publish(或publishlocal)vs sbt assembly用于分发和依赖冲突解决

yvfmudvl  于 2021-06-21  发布在  Flink
关注(0)|答案(0)|浏览(406)

底线是,我想发布一个可以使用 SBT 或者 Maven 其依赖项不会与集成项目的依赖项或可传递依赖项冲突。
目前我正在通过 SBT 使用 publish 命令,该命令配置为将工件发布到我的私有 JFrog Artifactory .
它正在按预期工作,因为它将把图书馆出版给 artifactory 我可以轻松地将结果库集成到不同的项目中 SBT 还有 Maven .
不幸的是,我发布的库有第三方依赖关系。它正在使用 cassandra datastax library 版本 3.3.0 .
我遇到了一个糟糕的情况,我的库的一个用户还依赖于另一个第三方库(我无法控制),它本身依赖于同一个cassandra驱动程序( flink-connector-cassandra 谁的pom可以在这里找到https://github.com/apache/flink/blob/master/flink-connectors/flink-connector-cassandra/pom.xml),谁的 casandra-driver 版本为 3.0.0 .
我尝试了各种排除的组合,并将库的cassandra版本更改为与第三方版本匹配( 3.3.0 ~>改成 3.0.0 就像在 flink-connector-cassandra )在消费市场 SBT 文件。
不幸的是,由于内部找不到类和方法,使用者在运行时崩溃 cassandra-driver 图书馆。
我想也许我可以把我的图书馆当作“肥肉”来分发 jar ,内联 cassandra 依赖关系(以及它自己的可传递的第三方依赖关系)和“挤压”命名空间以嵌套在my libraries命名空间下,以避免冲突(即 com.cassandra.driver 可以在下面筑巢 com.myproject 作为 com.myproject.cassandra.driver 或者类似的效果),希望能解决与flink cassandra驱动程序的运行时冲突。
有没有一个切实可行的方法来避免这些冲突 assembly 或者 publish 命令?
我的图书馆 SBT 看起来像这样(我正在发布的库):

lazy val commonSettings = Seq(
      scalaVersion := "2.11.8",
      sources in doc in Compile := List(),
      organization := "com.myLibrary.library",
      name := "commons",
      version := "0.4.1.1",
      publishTo := Some("Artifactory Realm" at "https://a.b.c.jfrog.io/myLibrary"),
      javacOptions ++= Seq("-source", "1.7", "-target", "1.7", "-Xlint")
    )

    lazy val myLibrary: Project = project.in(file("myLibrary"))
      .settings(
        commonSettings,
        name := "myLibrary",
        assemblyJarName in assembly := "myLibrary.jar",
        libraryDependencies ++= Seq(
          "com.datastax.cassandra" % "cassandra-driver-core" % "3.3.0" // << I've also tried to change this to match the flink's version of 3.0.0
// I've also tried to add
// classifier "shaded"
        )
      )

消费sbt文件如下所示:

val dependencies: Seq[ModuleID] = commonDependencies ++ flinkDeps ++ Seq(
    "org.apache.flink" %% "flink-connector-cassandra" % "1.4.1" ,
    "com.mylibrary" %% "library" % "0.4.1"
  )

我已经试着修改过了 SBT 排除cassandra驱动程序,但它不起作用:

val dependencies: Seq[ModuleID] = commonDependencies ++ flinkDeps ++ Seq(
        "org.apache.flink" %% "flink-connector-cassandra" % "1.4.1" excludeAll ExclusionRule(organization = "com.datastax"),
        "com.mylibrary" %% "library" % "0.4.1"
      )

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题