19

すべての依存関係がpom.xmlファイル内に保存されているプロジェクトがいくつかあります。

内部から依存関係を取得して、sbt を使用するプロジェクトに簡単に配置するにはどうすればよいですか?

それらすべてをコピーして貼り付けるのは時間がかかるだけです..

4

5 に答える 5

22

コマンドラインから実行されるこの scala スクリプトは、pom.xml ファイルを画面に表示される sbt 依存関係に変換して処理します。次に、pom.xml ファイルごとに 1 回だけコピー ペーストする必要があります。

注: 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
});
于 2013-03-15T10:46:07.667 に答える
8

George Pligor の回答を強化 (およびいくつかのバグを修正) したのでbuild.sbtpom.xml. Maven を に変換するpom.xmlにはbuild.sbt:

  1. このコードをPomToSbt.scala次の名前のファイルに配置しますpom.xml
  2. タイプscala PomToSbt.scala > build.sbt
  3. からの依存関係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)

私は要旨を作りました; 更新が必要な場合は、そこで行います。

于 2015-11-24T21:35:27.640 に答える
2

マイク、少なくとも 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)
于 2016-06-02T20:45:55.430 に答える
1

このブログエントリでは、考えられる 1 つの方法について説明します。より複雑なケースを処理するプラグインを指すコメントがあります。

于 2013-07-21T21:16:37.837 に答える