从Maven迁移到SBT

Vas*_*iuk 39 java scala pom.xml maven sbt

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

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

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

ret*_*nym 30

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


Jos*_*ald 18

上面的所有提示都有问题,我没有解决属性问题,而且当我们从父poms大量使用dependencyManagement时,我希望能够完全理解maven的东西.我把一个简单的scriptlet打包在一起,它从maven输出依赖项,然后获取顶级项,然后为组,工件,版本和范围做一个简单的正则表达式(忽略工件类型)

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

我将它直接传送到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"
Run Code Online (Sandbox Code Playgroud)


Did*_*dia 6

不是转换器,而是可以在此处找到将多模块项目从Maven移动到SBT的分步指南.

非常适合了解实际发生的情况并确保您对过程有相当大的控制权.


Vas*_*iuk 5

我没有设法在SBT中找到允许进行此类转换(POM - >项目定义)的未记录的功能,并且已经编写了一个非常简单的脚本,该脚本使用来自POM的 repos/dependencies 创建SBT构建文件.

如果您只需要将Maven/XML依赖项转换为SBT/Scala,则可以使用@retronym提供的此脚本