从Maven迁移到SBT

44

如您所知,SBT在某种程度上与Maven兼容-- SBT可以识别简单的Maven POM并可以使用其中指定的依赖项和存储库。然而,SBT wiki表示,如果在SBT项目定义中指定了内联依赖关系,则将忽略POM(因此在这种情况下同时使用两者是不可能的):

当存在内联依赖声明时,将忽略Maven和Ivy配置(pom.xml和ivy.xml)。

是否有人知道是否存在从Maven POM到SBT项目定义的转换器(将POM的XML转换为项目定义Scala代码)?我正在考虑编写这样的脚本(它将有助于将我的旧Scala / Maven项目迁移到SBT),但首先要知道是否已经存在此功能。

8个回答

33

转换器对于这个 hack 来说显得太过强大了,但我编写了一个脚本,可以将一段 <dependencies> 块转化为 SBT 格式的依赖项:http://gist.github.com/388334


不错的技巧!我也在考虑这种东西(+属性和存储库的转换)。 - Vasil Remeniuk

20

上述所有提示对我来说都存在一个问题,属性未被解析。由于我们大量使用来自父POM的dependencyManagement,因此我希望能找到一些能够完全理解Maven的东西。我编写了一个简单的脚本,从Maven输出依赖项,然后只获取顶层项目,并对组、构件、版本和范围(忽略构件类型)进行简单的正则表达式匹配。

mvn dependency:tree | grep "] +" | perl -pe 's/.*\s([\w\.\-]+):([\w\.\-]+):\w+:([\w\.\-]+):(\w+).*/libraryDependencies += "$1" % "$2" % "$3" % "$4"\n /' 

我将其直接导入到project/build.sbt文件中。样例输出如下(请记得在sbt的每行之间保留空格)

libraryDependencies += "org.springframework" % "spring-core" % "3.1.0.RELEASE" % "compile"

libraryDependencies += "se.scalablesolutions.akka" % "akka-actor" % "1.3.1" % "compile"

libraryDependencies += "se.scalablesolutions.akka" % "akka-spring" % "1.3.1" % "compile"

非常有帮助,很好的。 - cevaris

6
您可以在 这里 找到一份从 Maven 到 SBT 多模块项目迁移的详细指南,它不是转换器,而是一步一步的指导。该指南非常有助于理解实际发生的情况,并确保您在过程中有相当程度的控制。

那个链接已经失效了 :( - Shon

5

4

我写了mvn2sbt项目,用于将Java Maven项目转换为sbt项目。


非常酷 - 是一个很好的方式来启动和运行事物! - bbarker

3

请在Git-Hub上查看CodaHale的Maven-SBT项目。基本上,CodaHale用Maven替换了SBT中的IVY,因此与POM相关的任务应该更兼容/灵活。


链接似乎已经失效,请使用这个链接:https://github.com/rossabaker/maven-sbt - dertoni

1

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接