如何将pom xml转换为sbt依赖项?

如何将pom xml转换为sbt依赖项?,sbt,pom.xml,Sbt,Pom.xml,我有一些项目的所有依赖项都存储在pom.xml文件中 如何从内部检索依赖项,以便轻松地将它们放置到使用sbt的项目中 复制粘贴所有这些文件非常耗时。这个从命令行运行的scala脚本负责将pom.xml文件转换为屏幕上打印的sbt依赖项。然后,只需为每个pom.xml文件复制粘贴一次 注意:pom.xml必须与脚本位于同一文件夹中。然后从命令行执行:scala scriptname.scala import scala.xml._ (XML.load("pom.xml") \\ "depende

我有一些项目的所有依赖项都存储在pom.xml文件中

如何从内部检索依赖项,以便轻松地将它们放置到使用sbt的项目中


复制粘贴所有这些文件非常耗时。

这个从命令行运行的scala脚本负责将pom.xml文件转换为屏幕上打印的sbt依赖项。然后,只需为每个pom.xml文件复制粘贴一次

注意:pom.xml必须与脚本位于同一文件夹中。然后从命令行执行:
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
});

这解释了一种可能的方法。有一条评论指向一个处理更复杂情况的插件。

我增强了George Pligor的答案(并修复了一些错误),因此创建了一个完整的
build.sbt
文件,其中包含了
pom.xml
中的依赖项。要将Maven
pom.xml
转换为
build.sbt

  • 将此代码放入名为
    PomToSbt.scala的文件中
    pom.xml
  • 键入
    scala PomToSbt.scala>build.sbt
  • 将从
    pom.xml
    中提取依赖项,并将其放入完整的
    build.sbt
    文件中
  • 代码如下:

    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)
    

    );如果需要任何更新,我会在那里进行。

    迈克,下面是至少适用于Scala 11的代码:

    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)
    

    @George Pligor我对此做了一些修改,以创建一系列依赖项(添加了我自己的bug)。我制作了Apache2.0,如果有任何评论,请让我知道:)thx!我添加了使用amm传递pom文件参数的可能性:我得到以下错误。scala PomToSbt.scala/root/PomToSbt.scala:14:错误:';'应为字符串文字,但找到字符串文字。case=>s“”“%”$scope“”^/root/PomToSbt.scala:17:错误:“;”应为字符串文字,但找到字符串文字。s“$groupId”%%“$artifactId”%%“$version”$scope2“^2个错误found@AkshatChaturvedi您可以自由地尝试和编辑答案,以发送一个更好的版本,该版本是最新的,也适用于您和其他STHX!我添加了使用amm传递pom文件参数的可能性:以下是相关链接,对我来说很有用:
    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)