在不同的java maven项目中使用sbt构建的scala项目的传递依赖项

时间:2014-11-13 11:47:03

标签: java scala maven sbt

我在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应该解决这些传递依赖关系并将它们添加到我当前项目的类路径中。我错过了什么?

2 个答案:

答案 0 :(得分:0)

SBT将非常合乎逻辑地在publishM2时将您的库发布到m2缓存,但不会将其传递给它。如果您想将所有内容放入m2 repo中,您可以:

答案 1 :(得分:0)

运行mvn -X dependency:tree时,maven说sbt生成的pom.xml的groupId中存在错误。

问题在于我的build.sbt文件中的organization的值,其中包含斜杠。它作为groupId包含在pom.xml中。用点替换斜杠并重新运行sbt publishM2解决了问题。