首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sbt对依赖项的两个版本进行阴影处理

sbt对依赖项的两个版本进行阴影处理
EN

Stack Overflow用户
提问于 2018-11-28 18:13:12
回答 1查看 970关注 0票数 3

当我运行测试时,我会看到以下错误:

代码语言:javascript
复制
Exception: java.lang.NoSuchMethodError: fs2.Stream$.bracket(Ljava/lang/Object;Lscala/Function1;Lscala/Function1;)Lfs2/internal/FreeC;

我首先确保显式声明传递依赖项清理了构建文件,并删除了未用依赖关系以生成以下build.sbt:

代码语言:javascript
复制
scalaVersion := "2.12.7"
organization := "com.example "

lazy val lambdas = (project in file("."))
  .settings(
    libraryDependencies += "org.typelevel" %% "cats-core"   % "1.4.0",
    libraryDependencies += "org.typelevel" %% "cats-effect" % "1.0.0",

    libraryDependencies += "io.circe" %% "circe-core"    % "0.10.0",
    libraryDependencies += "io.circe" %% "circe-generic" % "0.10.0",
    libraryDependencies += "io.circe" %% "circe-parser"  % "0.10.0", 
    libraryDependencies += "io.circe" %% "circe-fs2"     % "0.10.0",

    libraryDependencies += "co.fs2" %% "fs2-core" % "1.0.0",
    libraryDependencies += "co.fs2" %% "fs2-io"   % "0.10.0",

    libraryDependencies += "org.http4s" %% "http4s-circe"  % "0.18.0",
    libraryDependencies += "org.http4s" %% "http4s-client" % "0.18.0",
    libraryDependencies += "org.http4s" %% "http4s-core"   % "0.18.0",

    libraryDependencies += "com.chuusai" %% "shapeless" % "2.3.3",

    libraryDependencies += "com.amazonaws" % "aws-lambda-java-core" % "1.2.0",
    libraryDependencies += "com.amazonaws" % "aws-java-sdk-core"    % "1.11.422",
    libraryDependencies += "com.amazonaws" % "aws-java-sdk-s3"      % "1.11.422",

    libraryDependencies += "org.scalatest"  %% "scalatest"  % "3.0.5"  % "test",
    libraryDependencies += "org.scalacheck" %% "scalacheck" % "1.14.0" % "test",

    libraryDependencies += "io.findify" %% "s3mock" % "0.2.4" % "test"
  )

所有的东西都会编译,我的两个测试中就有一个通过了。另一个失败,上面的错误。以下是被驱逐的sbt的输出:

代码语言:javascript
复制
[warn] Found version conflict(s) in library dependencies; some are suspected to be binary incompatible:
[warn]  * co.fs2:fs2-core_2.12:1.0.0 is selected over 0.10.0
[warn]      +- io.circe:circe-fs2_2.12:0.10.0                     (depends on 1.0.0)
[warn]      +- com.example:lambdas_2.12:0.1.0-SNAPSHOT             (depends on 1.0.0)
[warn]      +- co.fs2:fs2-scodec_2.12:0.10.0                      (depends on 0.10.0)
[warn]      +- org.http4s:jawn-fs2_2.12:0.12.0                    (depends on 0.10.0)
[warn]      +- co.fs2:fs2-io_2.12:0.10.0                          (depends on 0.10.0)
[warn]  * org.typelevel:cats-effect_2.12:1.0.0 is selected over 0.8
[warn]      +- co.fs2:fs2-core_2.12:1.0.0                         (depends on 1.0.0)
[warn]      +- com.example:lambdas_2.12:0.1.0-SNAPSHOT             (depends on 1.0.0)
[warn]      +- org.http4s:http4s-core_2.12:0.18.0                 (depends on 0.8)
[warn]  * org.typelevel:cats-core_2.12:1.4.0 is selected over {1.0.1, 1.3.1}
[warn]      +- io.circe:circe-core_2.12:0.10.0 ()                 (depends on 1.4.0)
[warn]      +- co.fs2:fs2-core_2.12:1.0.0                         (depends on 1.4.0)
[warn]      +- org.typelevel:cats-effect_2.12:1.0.0               (depends on 1.3.1)
[warn]      +- com.example:lambdas_2.12:0.1.0-SNAPSHOT             (depends on 1.3.1)
[warn]      +- org.http4s:http4s-core_2.12:0.18.0                 (depends on 1.0.1)
[warn]  * io.circe:circe-jawn_2.12:0.10.0 is selected over 0.9.1
[warn]      +- io.circe:circe-parser_2.12:0.10.0 ()               (depends on 0.10.0)
[warn]      +- io.circe:circe-fs2_2.12:0.10.0                     (depends on 0.10.0)
[warn]      +- org.http4s:http4s-circe_2.12:0.18.0                (depends on 0.9.1)
[warn]  * org.spire-math:jawn-parser_2.12:0.13.0 is selected over 0.11.0
[warn]      +- io.circe:circe-jawn_2.12:0.10.0 ()                 (depends on 0.13.0)
[warn]      +- org.http4s:jawn-fs2_2.12:0.12.0                    (depends on 0.11.0)
[warn] Run 'evicted' to see detailed eviction warnings
[info] Here are other depedency conflicts that were resolved:
[info]  * commons-logging:commons-logging:1.1.3 is selected over 1.2
[info]      +- com.amazonaws:aws-java-sdk-core:1.11.422           (depends on 1.1.3)
[info]      +- org.apache.httpcomponents:httpclient:4.5.5         (depends on 1.2)
[success] Total time: 2 s, completed Nov 28, 2018 12:56:33 PM

从使用依赖关系图看,我似乎需要两个版本的fs2-core:1.0.00.10.0

这是我试图使用sbt-组件遮阳来处理驱逐的尝试,方法是在需要它的http4s库中重命名旧版本的fs2。实际上,没有什么是用这个构建文件进行编译的,所以我猜想设置这些东西的方式存在多个问题。

代码语言:javascript
复制
//build properties
//sbt.version=1.1.2

//assembly.sbt
//addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.8")

scalaVersion := "2.12.7"
organization := "com.example"

lazy val fatJar = project
  .enablePlugins(AssemblyPlugin)
  .settings(
    libraryDependencies ++= Seq(
      "org.typelevel" %% "cats-core"   % "1.4.0",
      "org.typelevel" %% "cats-effect" % "1.0.0",

      "io.circe" %% "circe-core"    % "0.10.0",
      "io.circe" %% "circe-generic" % "0.10.0",
      "io.circe" %% "circe-parser"  % "0.10.0",
      "io.circe" %% "circe-fs2"     % "0.10.0",

      "co.fs2" %% "fs2-core" % "1.0.0",
      "co.fs2" %% "fs2-io"   % "0.10.0",

      "org.http4s" %% "http4s-circe"  % "0.18.0",
      "org.http4s" %% "http4s-client" % "0.18.0",
      "org.http4s" %% "http4s-core"   % "0.18.0",

      "com.chuusai" %% "shapeless" % "2.3.3",

      "com.amazonaws" % "aws-lambda-java-core" % "1.2.0",
      "com.amazonaws" % "aws-java-sdk-core"    % "1.11.422",
      "com.amazonaws" % "aws-java-sdk-s3"      % "1.11.422",

      "org.scalatest"  %% "scalatest"  % "3.0.5"  % "test",
      "org.scalacheck" %% "scalacheck" % "1.14.0" % "test",

      "io.findify" %% "s3mock" % "0.2.4" % "test"),

    assemblyShadeRules in assembly ++= Seq(
      ShadeRule.rename("co.fs2.**" -> "old_fs2.@1")
        .inLibrary("org.http4s" %% "http4s-circe" % "0.18.0")
        .inLibrary("org.http4s" %% "http4s-core"  % "0.18.0")
    )
  )

lazy val kraken_shaded = (project in file("."))
  .settings(
    name := "kraken-shaded",
    packageBin in Compile := (assembly in (fatJar, Compile)).value
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-10 19:38:57

我不是http4sfs2的专家,但我相信fs21.0.x版本引入了突破性的更改。

而且,正如您可以看到的,https://http4s.org/versions/ http4s 0.18.x是针对fs2 0.10.x构建的。

因此,我不相信你能让他们一起工作。

您可能会认为,在阴影的0.10.x版本的fs2 for http4s,并使用1.0.x版本在您的项目.

但是,我认为这是不可能的,除非您从未使用http4s创建的流,也没有将该流传递给http4s --这肯定不是它的工作方式。

不过,您可以使用0.20.x

现在,这是一个里程碑,所以在它稳定之前,您可以预期会发生变化--但如果您不想降级到fs2 0.10.x,那么它现在可能会起作用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53525647

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档