2013-03-15 6 views

Antwort

19

Das scala-Skript, das von der Kommandozeile ausgeführt wird, kümmert sich darum, die pom.xml-Datei konvertieren Abhängigkeiten auf dem Bildschirm zu bedruckenden SBT. Dann müssen Sie nur einmal für jede pom.xml-Datei einfügen.

Hinweis: Die Datei pom.xml muss sich im selben Ordner wie das Skript befinden. Dann von der Kommandozeile ausführen Sie: scala scriptname.scala

import scala.xml._ 

(XML.load("pom.xml") \\ "dependencies") \ "dependency" foreach ((dependency: Node) => { 
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("[-\\.]", "_") 

print("val %s = \"%s\" %% \"%s\" %% \"%s\"".format(artifactValName, groupId, artifactId, version)) 
scope match { 
    case "" => print("\n") 
    case _ => print(" %% \"%s\"\n".format(scope)) 
} 
None 
}); 
+5

Ich brauchte 'Import scala.xml._' mit scala 2.10.0 – pic

+2

@George Pligor ich hinzufügen habe dies ein wenig angepasst, um eine Seq von Abhängigkeiten zu erzeugen (mit meinem eigenen Fehler hinzugefügt). Ich habe es Apache 2.0 gemacht, wenn irgendein Kommentar, lass es mich wissen :) https://github.com/matanster/pomToSbt – matanster

+0

thx! Ich fügte die Möglichkeit hinzu, das Argument der Pom-Datei mit Hilfe von AMM zu übergeben: https://gist.github.com/dportabella/3512f92a60325d8375e5ceb942b911da –

0

Diese blog entry erklärt eine mögliche Art und Weise. Es gibt einen Kommentar, der auf ein Plugin verweist, das komplexere Fälle behandelt.

4

Ich habe George Pligor die Antwort verbessert (und ein paar Fehler behoben), so dass eine komplette build.sbt Datei erstellt wird, die die Abhängigkeiten von pom.xml enthält.

  1. Platzieren Sie diesen Code in eine Datei PomToSbt.scala von pom.xml neben pom.xml
  2. Typ scala PomToSbt.scala > build.sbt
  3. Die Abhängigkeiten extrahiert und platziert werden in eine komplette build.sbt Datei mit dem Namen: a Maven pom.xml-build.sbt zu konvertieren. Hier

ist der Code:

import scala.xml._ 

val lines = (XML.load("pom.xml") \\ "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"""" 
    } 

    s""" "$groupId" %% "$artifactId" % "$version"$scope2""" 
} 

val buildSbt = io.Source.fromURL("https://raw.githubusercontent.com/mslinn/sbtTemplate/master/build.sbt").mkString 
val libText = "libraryDependencies ++= Seq(" 
val buildSbt2 = buildSbt.replace(libText, libText + lines.mkString("\n", ",\n", "")) 
println(buildSbt2) 

I made a gist; Wenn irgendwelche Updates erforderlich sind, werde ich sie dort machen.

+0

thx! Ich fügte die Möglichkeit hinzu, das Argument der Pom-Datei mit AMM zu übergeben: https://gist.github.com/dportabella/3512f92a60325d8375e5ceb942b911da –

1

Mike, hier ist der Code, der mit Scala 11 zumindest funktioniert:

import scala.xml._ 

//build.sbt file 
val lines = (XML.load("pom.xml") \\ "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"""" 
    } 

    s""" "$groupId" %% "$artifactId" % "$version"$scope2""" 
} 

val buildSbt: String = io.Source.fromURL("https://raw.githubusercontent.com/mslinn/sbtTemplate/master/build.sbt").mkString 

val libText = "libraryDependencies ++= Seq\\(" 
val buildSbt2 = buildSbt.replaceFirst(libText, libText + lines.mkString("\n", ",\n", "")) 
println(buildSbt2) 
0
import scala.xml._ 
// To convert a Maven pom.xml to build.sbt: 
// 1) Place this code into a file called PomToSbt.scala next to pom.xml 
// 2) Type scala PomtoSbt.scala > build.sbt 
// The dependencies from pom.xml will be extracted and place into a complete build.sbt file 
// Because most pom.xml files only refernence non-Scala dependencies, I did not use %% 
val lines = (XML.load("pom.xml") \\ "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"""" 
    } 

    s""" "$groupId" % "$artifactId" % "$version"$scope2""" 
} 

val buildSbt = io.Source.fromURL("https://raw.githubusercontent.com/mslinn/sbtTemplate/master/build.sbt").mkString 
val libText = "libraryDependencies ++= Seq(" 
val buildSbt2 = buildSbt.replace(libText, libText + lines.mkString("\n", ",\n", "")) 
println(buildSbt2)