Skip to content

Instantly share code, notes, and snippets.

@dmarticus
Last active April 12, 2020 05:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dmarticus/b0a858ae9030130bf2a4af366fde39a5 to your computer and use it in GitHub Desktop.
Save dmarticus/b0a858ae9030130bf2a4af366fde39a5 to your computer and use it in GitHub Desktop.
Convert POM dependencies to SBT dependencies using the ammonite REPL. Useful when trying to migrate a project from maven to SBT.
#!/usr/bin/env amm
// This script converts Maven dependencies from a pom.xml to sbt dependencies.
// It is based on the answers of George Pligor and Mike Slinn on http://stackoverflow.com/questions/15430346/
// - install https://github.com/lihaoyi/Ammonite
// - make this script executable: chmod +x PomDependenciesToSbt
// - run it with from your shell (e.g bash):
// $ ./PomDependenciesToSbt /path/to/pom.xml
import scala.xml._
import ammonite.ops._
def main(pomPath: String, path: Path = pwd) = {
val lines = (XML.load(pomPath) \\ "dependencies") \ "dependency" map { dependency =>
val groupId = (dependency \ "groupId").text
val artifactId = (dependency \ "artifactId").text
val version = (dependency \ "version").text
val scope = (dependency \ "scope").text
val classifier = (dependency \ "classifier").text
val artifactValName: String = artifactId.replaceAll("[-\\.]", "_")
val scope2 = scope match {
case "" => ""
case _ => s""" % "$scope""""
}
val exclusions = (dependency \ "exclusions" \ "exclusion" map { exclusion =>
val groupId = (exclusion \ "groupId").text
val artifactId = (exclusion \ "artifactId").text
s"""\n exclude("$groupId", "$artifactId")"""
}).mkString
s""" "$groupId" % "$artifactId" % "$version"$scope2$exclusions"""
}
println(lines.mkString("", ",\n", "\n"))
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment