object scala {
val version = "SCALA_VERSION$"
}
val xml = <dependencies>
</dependencies>
val data: Seq[(String, String, String)] = (xml \ "dependency") map { d =>
val groupId = d \ "groupId" text
val artifactId = d \ "artifactId" text
val versionNum = d \ "version" text
(groupId, artifactId, versionNum)
}
val CrossBuildArtifact = """([\w-]+)_\$SCALA_VERSION\$""".r
def dep(a: String, g: String, v: String, cross: Boolean) = {
val sep = if (cross) "%%" else "%"
val ident = a.split("-").map(_.capitalize).mkString
"""val %s = "%s" %s "%s" %% "%s" """ format (ident, g, sep, a, v)
}
val m = data map {
case (g, CrossBuildArtifact(a), v) => dep(a, g, v, true)
case (g, a, v) => dep(a, g, v, false)
} mkString("\n")
println(m)
(코드는 어렵군요 ㅡㅡ;;) 위 코드에서 xml부분에 pom.xml의 dependencies부분을 붙혀넣고 터미널에서 스칼라스크립트로 실행해 주면 output으로 SBT의 코드를 아래처럼 만들어 줍니다.
val LiftMapper = "net.liftweb" % "lift-mapper" % "2.2"
val LogbackClassic = "ch.qos.logback" % "logback-classic" % "0.9.26"
val H2 = "com.h2database" % "h2" % "1.2.138"
val ServletApi = "javax.servlet" % "servlet-api" % "2.5"
val Junit = "junit" % "junit" % "4.7"
val Specs = "org.scala-tools.testing" % "specs" % "1.6.1"
val Jetty = "org.mortbay.jetty" % "jetty" % "6.1.25"
val ScalaCompiler = "org.scala-lang" % "scala-compiler" % "$SCALA_VERSION$"
기본적으로 xml을 파싱해서 스트링으로 변환만 해준 것이기 때문에 SBT에 맞추어서 변환해 주어야 할 부분은 변환해 주어야 할 것 같습니다. 예를 들면 각 라이브러리 마지막에 "compile->default"나 "test"같인 라이브러리가 사용처(?)를 지정해주는 부분이나 호환성을 위해서 %대신 %%를 추가하는 등의 작업은 따로 해주어야 합니다.
Comments