43
votes

As you know, SBT is compatible with Maven in some way -- SBT recognizes simple Maven POMs and can use dependencies and repositories specified in them. However, SBT wiki says that, if inline dependency is specified in SBT project definition, POM will be ignored (so using both in this case is impossible):

Maven and Ivy configurations (pom.xml and ivy.xml) are ignored when inline dependency declarations are present.

Does anyone know, if any kind of converter from Maven POM to SBT project definition exists (translating POM's XML into project definition Scala code)? I'm considering writing such script (that will help to migrate my old Scala/Maven projects to SBT), but want to know first, if this functionality already exists.

8

8 Answers

32
votes

Converter is far too strong a term for this hack, but I wrote a script to take a block of <dependencies> and output SBT style deps: http://gist.github.com/388334

20
votes

All the tips above had the issue for me that properties were not resolved, and as we make heavy use of the dependencyManagement from parent poms, I was hoping for something that actually could fully understand maven. I whipped together a simplistic scriptlet that outputs the dependencies from maven and just takes the top level items and then does a simple regex for the group, artifact, version, and scope (the artifact type is ignored)

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

I piped this directly to project/build.sbt. The sample output is (remember to keep empty spaces between sbt lines)

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"
6
votes

Not a converter, but a step-by-step guide for moving a multimodule project from Maven to SBT can be found here.

Quite nice for understanding what actually happens and ensuring you have a fair amount of control over the proces..

5
votes

I didn't manage to find an undocumented capability in SBT that allows to make such conversions (POM -> project definition), and have came up with writing a very simple script that creates SBT build file with repos/dependencies from POM.

In case you just need to convert Maven/XML dependencies into SBT/Scala, you can use this script provided by @retronym

4
votes

I wrote mvn2sbt project for convertion java maven project to sbt project.

3
votes

Take a look a CodaHale's Maven-SBT project over at Git-Hub. Basically, CodaHale has swapped out IVY from SBT and replaced it with Maven, so POM related tasks should be be more compatible/flexible.

1
votes

I wrote yet another hack to convert between pom.xml and build.sbt. It's useful for converting the bulk of what I'm interested in.

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

1
votes

I just had the same problem and created a solution in javascript that you can access here: http://www.maven-to-sbt.de/