从 Maven 迁移到 SBT

2022-09-01 01:00:20

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

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

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


答案 1

转换器对于这个黑客来说是一个太强的术语,但我写了一个脚本来获取一个块并输出SBT风格的deps:http://gist.github.com/388334<dependencies>


答案 2

上面的所有提示对我来说都有一个问题,即属性没有得到解决,并且由于我们大量使用来自父poms的依赖管理,我希望有一些实际上可以完全理解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"

推荐