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),但首先想知道这个功能是否已经存在。

4

8 回答 8

32

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

于 2010-06-04T10:19:58.037 回答
20

上面所有的技巧对我来说都有一个问题,即属性没有得到解决,当我们大量使用父 pom 中的dependencyManagement 时,我希望得到一些实际上可以完全理解 maven 的东西。我拼凑了一个简单的 scriptlet,它从 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"
于 2012-10-25T04:48:24.077 回答
6

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

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

于 2012-02-06T11:29:57.743 回答
5

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

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

于 2010-06-04T15:09:09.943 回答
4

我为将 java maven 项目转换为 sbt 项目编写了mvn2sbt项目。

于 2014-06-02T14:28:39.863 回答
3

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

于 2011-04-13T13:52:05.900 回答
1

我又写了一个技巧来在 和 之间进行pom.xml转换build.sbt。它对于转换我感兴趣的大部分内容很有用。

https://gist.github.com/schmmd/5050790

于 2013-02-27T21:42:59.497 回答
1

我刚刚遇到了同样的问题,并在 javascript 中创建了一个解决方案,您可以在此处访问:http: //www.maven-to-sbt.de/

于 2015-05-31T20:00:40.223 回答