web-dev-qa-db-ja.com

MavenからSBTへの移行

ご存知のように、SBTは何らかの方法でMavenと互換性があります。SBTは単純なMaven POMを認識し、それらで指定された依存関係とリポジトリーを使用できます。ただし、 SBT wiki は、SBTプロジェクト定義でインライン依存関係が指定されている場合、POMは無視されることを示しています(したがって、この場合は両方を使用することはできません)。

インライン依存関係宣言が存在する場合、MavenおよびIvy構成(pom.xmlおよびivy.xml)は無視されます。

Maven POMからSBTプロジェクト定義への何らかのコンバーターが存在するかどうか(POMのXMLをプロジェクト定義に変換するScalaコード))を知っている人はいますか?私はそのようなスクリプトを書くことを検討しています(移行に役立ちます)私の古いScala/MavenはSBTにプロジェクトします)が、この機能がすでに存在するかどうかを最初に知りたいです。

39
Vasil Remeniuk

Converterはこのハックには強すぎる用語ですが、<dependencies>のブロックを取得し、SBTスタイルの詳細を出力するスクリプトを作成しました: http://Gist.github.com/388334

30
retronym

上記のすべてのヒントには、プロパティが解決されないという問題があり、親pomからのdependencyManagementを多用するため、実際にMavenを完全に理解できるものを期待していました。 Mavenから依存関係を出力し、最上位のアイテムを取得して、グループ、アーティファクト、バージョン、スコープの単純な正規表現を実行する単純なスクリプトレットをまとめました(アーティファクトタイプは無視されます)

mvn dependency:tree | grep "] +" | Perl -pe 's/.*\s([\w\.\-]+):([\w\.\-]+):\w+:([\w\.\-]+):(\w+).*/libraryDependencies += "$1" % "$2" % "$3" % "$4"\n /' 

これを直接project/build.sbtにパイプしました。サンプル出力は次のとおりです(sbt行の間に空のスペースを保持することを忘れないでください)

libraryDependencies += "org.springframework" % "spring-core" % "3.1.0.RELEASE" % "compile"

libraryDependencies += "se.scalablesolutions.akka" % "akka-actor" % "1.3.1" % "compile"

libraryDependencies += "se.scalablesolutions.akka" % "akka-spring" % "1.3.1" % "compile"
18
JoshMahowald

そのような変換(POM->プロジェクト定義)を可能にする文書化されていない機能をSBTで見つけることができず、 非常に単純なスクリプト を作成して SBTビルドファイル リポジトリ/依存関係を [〜#〜] pom [〜#〜] から。

Maven/XMLの依存関係をSBT/Scalaに変換する必要がある場合は、 このスクリプト を使用できます @ retronym

5
Vasil Remeniuk

コンバーターではありませんが、マルチモジュールプロジェクトをMavenからSBTに移動するためのステップバイステップガイドがあります ここ

実際に何が起こっているのかを理解し、プロセスをかなり制御できるようにしてくれて、とてもうれしいです。

4
Didia

私は mvn2sbt 変換用のプロジェクトJava mavenプロジェクトからsbtプロジェクトへ。

4
Andrzej Jozwik

Git-HubでCodaHaleのMaven-SBTプロジェクトをご覧ください。基本的に、CodaHaleはIVYをSBTから交換し、Mavenに置き換えたため、POM関連のタスクshouldより互換性/柔軟性があります。

3
Big Rich

私はちょうど同じ問題を抱えていて、ここからアクセスできるjavascriptでソリューションを作成しました: http://www.maven-to-sbt.de/

1
StaroX

pom.xmlbuild.sbtの間で変換するためのさらに別のハックを作成しました。興味のあるものの大部分を変換するのに役立ちます。

https://Gist.github.com/schmmd/505079

1
schmmd