Vraag Hoe kon ik een pom xml naar sbt afhankelijkheden converteren?


Ik heb een aantal projecten die alle afhankelijkheden opgeslagen binnen pom.xml bestanden.

Hoe kon ik de afhankelijkheden van binnen halen, zodat ik ze gemakkelijk kon plaatsen voor een project dat sbt gebruikt?

Kopiëren plakken is gewoon tijdrovend ..


14
2018-03-15 10:46


oorsprong


antwoorden:


Dit Scala-script, dat loopt vanaf de opdrachtregel, zorgt daarvoor en converteert het pom.xml-bestand naar sbt-afhankelijkheden die op het scherm worden afgedrukt. Dan hoeft u maar één keer te plakken voor elk pom.xml-bestand.

Opmerking: de pom.xml moet zich in dezelfde map bevinden als het script. Vervolgens voer je vanaf de opdrachtregel het volgende uit: 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
});

20
2018-03-15 10:46



Ik heb het antwoord van George Pligor verbeterd (en een paar bugs verholpen), dus een complete build.sbt bestand is gemaakt waarin de afhankelijkheden zijn opgenomen pom.xml. Om een ​​Maven te converteren pom.xml naar build.sbt:

  1. Plaats deze code in een bestand met de naam PomToSbt.scala naast pom.xml
  2. Type scala PomToSbt.scala > build.sbt
  3. De afhankelijkheden van pom.xml zal worden geëxtraheerd en in een complete worden geplaatst build.sbt het dossier.

Hier is de 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)

Ik heb een idee gemaakt; als er updates nodig zijn, zal ik ze daar maken.


5
2017-11-24 21:35



Deze blog entry legt een mogelijke manier uit. Er is een opmerking die verwijst naar een plug-in die complexere zaken afhandelt.


1
2017-07-21 21:16



Mike, hier is de code die tenminste met Scala 11 werkt:

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)

1
2018-06-02 20:45



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)

0
2017-10-23 06:41