我在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应该解决这些传递依赖关系并将它们添加到我当前项目的类路径中。我错过了什么?
答案 0 :(得分:0)
SBT将非常合乎逻辑地在publishM2
时将您的库发布到m2缓存,但不会将其传递给它。如果您想将所有内容放入m2 repo中,您可以:
test
mvn dependency:go-offline
之类的内容
答案 1 :(得分:0)
运行mvn -X dependency:tree
时,maven说sbt生成的pom.xml的groupId中存在错误。
问题在于我的build.sbt文件中的organization
的值,其中包含斜杠。它作为groupId包含在pom.xml中。用点替换斜杠并重新运行sbt publishM2
解决了问题。