私は sbt アセンブリを使用してアプリケーションを取得し、「1 つの大きな jar」を作成してデプロイしようとしています。
Play 2.1.2 が scala-stm 0.6 に依存し、akka-transactor 2.1.4 が scala-stm 0.7 に依存しているという問題があります。
問題なく SBT でアプリを実行できます (Eclipse と IntelliJ も同様)。
「sbt assembly」を使用してこの問題を解決する方法がわかりません
ここに私が見ているものを正確に説明するいくつかの出力があります(いくつかのものを切り取りました):
[NPL-play] $ assembly
...
[info] Including from cache: akka-testkit_2.10-2.1.4.jar
[info] Including from cache: scala-stm_2.10.0-0.6.jar
...
[info] Including from cache: spray-httpx-1.1-M7.jar
[info] Including from cache: scala-stm_2.10-0.7.jar
...
[info] Including from cache: scala-library.jar
[info] Including from cache: voltdbclient-2.7.2.jar
[warn] Merging 'public/plugins/colreorder/docs/media/license' with strategy 'rename'
[warn] Merging 'public/plugins/colvis/docs/media/license' with strategy 'rename'
[warn] Merging 'public/images/icons/color/readme.txt' with strategy 'rename'
[warn] Merging 'public/plugins/flot/LICENSE.txt' with strategy 'rename'
[warn] Merging 'public/plugins/photoswipe/README.md' with strategy 'rename'
[error] (NPL-util/*:assembly) deduplicate: different file contents found in the following:
[error] /Users/worms/.ivy2/cache/org.scala-stm/scala-stm_2.10.0/jars/scala-stm_2.10.0-0.6.jar:scala/concurrent/stm/ccstm/CCSTMRefs.class
[error] /Users/worms/ivy2/cache/org.scala-stm/scala-stm_2.10/jars/scala-stm_2.10-0.7.jar:scala/concurrent/stm/ccstm/CCSTMRefs.class
[error] (NPL-admin/*:assembly) deduplicate: different file contents found in the following:
[error] /Users/worms/.ivy2/cache/org.scala-stm/scala-stm_2.10.0/jars/scala-stm_2.10.0-0.6.jar:scala/concurrent/stm/ccstm/CCSTMRefs.class
[error] /Users/worms/.ivy2/cache/org.scala-stm/scala-stm_2.10/jars/scala-stm_2.10-0.7.jar:scala/concurrent/stm/ccstm/CCSTMRefs.class
[error] Total time: 6 s, completed Aug 1, 2013 4:09:09 PM
[NPL-play] $
依存関係ツリーを見ると、競合する依存関係を持つ 2 つのものが表示されます (たくさんのものを削除しています)。
[NPL-play] $ dependency-tree
[info] Updating {file:/Users/worms/dev/npl/}NPL-util...
[info] Updating {file:/Users/worms/dev/npl/}NPL-util...
[info] Done updating.
[info] Done updating.
[info] Updating {file:/Users/worms/dev/npl/}NPL-admin...
[info] Done updating.
[info] com.myorg:npl-admin_2.10:0.0.2 [S]
[info] +-com.myorg:networking_2.10:0.0.2 [S]
...
[info] | | |
[info] | | +-com.typesafe.akka:akka-transactor_2.10:2.1.4 [S]
[info] | | | +-com.typesafe.akka:akka-actor_2.10:2.1.4 [S]
[info] | | | | +-com.typesafe:config:1.0.0
[info] | | | |
[info] | | | +-org.scala-stm:scala-stm_2.10:0.7 [S]
...
[info] | +-play:play_2.10:2.1.3-RC1
...
[info] | +-play:play-iteratees_2.10:2.1.3-RC1
[info] | | +-com.github.scala-incubator.io:scala-io-file_2.10:0.4.2 [S]
[info] | | | +-com.github.scala-incubator.io:scala-io-core_2.10:0.4.2 [S]
[info] | | | +-com.jsuereth:scala-arm_2.10:1.3 [S]
[info] | | |
[info] | | +-com.typesafe:config:1.0.0
[info] | | +-org.scala-stm:scala-stm_2.10.0:0.6 [S]
...
この依存関係の問題を解決する方法について何か提案はありますか?
========================= 編集: より簡単な例の追加 ================== ====
Play と Akka だけで非常にシンプルなアプリケーションを作成してみることにしました。ただし、単純な Play アプリを「組み立て」ようとして、問題が発生しています。
これが私の project/plugins.sbt ファイルです:
resolvers += "Typesafe repository" at "http://repo.typesafe.com/typesafe/releases/"
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.9.1")
addSbtPlugin("net.virtual-void" % "sbt-dependency-graph" % "0.7.4")
addSbtPlugin("play" % "sbt-plugin" % "2.1.0")
ここに私の project/Build.scala ファイルがあります:
import sbt._
import Keys._
import play.Project._
import sbtassembly.Plugin._
import AssemblyKeys._
object ApplicationBuild extends Build {
val appName = "dependencyExample"
val appVersion = "1.0"
val appDependencies = Nil
val appSettings = Defaults.defaultSettings ++ assemblySettings ++ Seq(net.virtualvoid.sbt.graph.Plugin.graphSettings:_*)
val main = play.Project( appName, appVersion, appDependencies, settings = appSettings)
}
そして、これが「アセンブリ」から得た出力です
[dependencyExample] $ assembly
[info] No tests to run for test:test
[info] Including from cache: jta-1.1.jar
[info] Including from cache: scala-arm_2.10-1.3.jar
[info] Including from cache: jcl-over-slf4j-1.6.6.jar
[info] Including from cache: jul-to-slf4j-1.6.6.jar
[info] Including from cache: commons-lang3-3.1.jar
[info] Including from cache: logback-classic-1.0.7.jar
[info] Including from cache: config-1.0.0.jar
[info] Including from cache: slf4j-api-1.6.6.jar
[info] Including from cache: commons-codec-1.3.jar
[info] Including from cache: async-http-client-1.7.6.jar
[info] Including from cache: joda-time-2.1.jar
[info] Including from cache: commons-logging-1.1.1.jar
[info] Including from cache: httpclient-4.0.1.jar
[info] Including from cache: jackson-mapper-asl-1.9.10.jar
[info] Including from cache: play-exceptions-2.1.0.jar
[info] Including from cache: scala-io-core_2.10-0.4.2.jar
[info] Including from cache: httpcore-4.0.1.jar
[info] Including from cache: logback-core-1.0.7.jar
[info] Including from cache: jackson-core-asl-1.9.10.jar
[info] Including from cache: scala-io-file_2.10-0.4.2.jar
[info] Including from cache: play-iteratees_2.10-2.1.0.jar
[info] Including from cache: joda-convert-1.2.jar
[info] Including from cache: javassist-3.16.1-GA.jar
[info] Including from cache: netty-3.5.9.Final.jar
[info] Including from cache: ehcache-core-2.6.0.jar
[info] Including from cache: akka-actor_2.10-2.1.0.jar
[info] Including from cache: signpost-commonshttp4-1.2.1.2.jar
[info] Including from cache: scala-stm_2.10.0-0.6.jar
[info] Including from cache: akka-slf4j_2.10-2.1.0.jar
[info] Including from cache: signpost-core-1.2.1.2.jar
[info] Including from cache: scala-reflect-2.10.0.jar
[info] Including from cache: play_2.10-2.1.0.jar
[info] Including from cache: sbt-link-2.1.0.jar
[info] Including from cache: templates_2.10-2.1.0.jar
[info] Including from cache: scala-library.jar
[warn] Merging 'META-INF/MANIFEST.MF' with strategy 'discard'
[error] (*:assembly) deduplicate: different file contents found in the following:
[error] /Users/worms/.ivy2/cache/commons-logging/commons-logging/jars/commons-logging-1.1.1.jar:org/apache/commons/logging/impl/SimpleLog.class
[error] /Users/worms/.ivy2/cache/org.slf4j/jcl-over-slf4j/jars/jcl-over-slf4j-1.6.6.jar:org/apache/commons/logging/impl/SimpleLog.class
[error] Total time: 2 s, completed Aug 6, 2013 3:07:27 PM
[dependencyExample] $
この問題をどのように解決できるかはまだはっきりしていません。この単純なテストの問題を解決できれば、Akka + Play の問題を解決できると思います。
=================== 編集: 同じことを達成する別の方法 =================
play で「魔法の」sbt コマンドを見つけました。「距離」。これにより、アプリケーションが .zip ファイルにパッケージ化され、Java がインストールされている任意のマシンで解凍して実行できます。
これは、ちょっとした情報を見つけた coursera のブログ投稿です。
http://betacs.pro/blog/2013/08/03/deploying-play-apps/
詳細については、次を参照してください。
http://www.playframework.com/documentation/2.1.x/ProductionDist