我在 java maven 项目中包含了一个用 sbt 构建的 scala 库。该 jar 是使用 sbt publishM2
构建的。我可以很好地使用库中的 Scala 类,但是 Maven 不会将这些类的传递依赖项添加到类路径中。例如,其中一个 scala 类使用 joda-time,这在其 build.sbt 文件中指定如下:
libraryDependencies += "joda-time" % "joda-time" % "2.0"
然而,当使用来自 java 项目的 mvn test
运行测试时,我得到一个类未找到的异常:
java.lang.NoClassDefFoundError: org/joda/time/DateTime
当查看由 sbt 构建并放入 ~/.m2/...
子目录中的 pom 时,我可以找到以下 joda-time 条目:
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.0</version>
</dependency>
我的理解是,maven 应该解决这些传递依赖并将它们添加到我当前项目的类路径中。我错过了什么?
最佳答案
从逻辑上讲,当您publishM2
时,SBT 会将您的库发布到您的m2 缓存,但不会发布其传递依赖项。如果您想将所有内容都放入您的 m2 存储库中,您可以:
- 使用sbt-assembly用于发布具有依赖项的胖 jar 的插件。
- 使用包含这些依赖项的 pom,并运行类似
mvn dependency:go-offline
的程序在测试
之前
- 试试这个 ivy-maven plugin (未测试)帮助 Maven 找到由 sbt 下载的依赖项。
关于java - 在不同的 java maven 项目中使用 sbt 构建的 scala 项目的传递依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26908199/