And*_*rea 5 scala nutch sbt akka sbt-assembly
我需要创建一个Nutch插件,使用Akka与一些外部应用程序通信.为了做到这一点,我需要将插件打包为胖罐 - 我正在使用sbt-assembly版本0.8.3.
当我尝试运行插件时,我得到了异常
com.typesafe.config.ConfigException$Missing: No configuration setting found for key 'akka'
Run Code Online (Sandbox Code Playgroud)
好像Akka无法找到reference.conf.这很奇怪,因为sbt-assembly 应该能够正确打包该文件,事实上我可以在创建的jar中看到它的内容.
我build.sbt看起来像这样:
import AssemblyKeys._
name := "my-project"
version := "0.1-SNAPSHOT"
scalaVersion := "2.10.0"
resolvers ++= Seq(
"Central Repo" at "http://repo1.maven.org/maven2",
"Typesafe Repository" at "http://repo.typesafe.com/typesafe/releases/",
"Akka io" at "http://akka.io/repository"
)
libraryDependencies ++= Seq(
...,
"com.typesafe.akka" %% "akka-actor" % "2.1.1",
"com.typesafe.akka" %% "akka-remote" % "2.1.1"
)
seq(assemblySettings: _*)
mergeStrategy in assembly <<= (mergeStrategy in assembly) { (old) =>
{
case "plugin.xml" =>
MergeStrategy.first
case x if x startsWith "org/apache/jasper" =>
MergeStrategy.last
case x if x startsWith "javax/xml" =>
MergeStrategy.last
case x if x startsWith "javax/servlet" =>
MergeStrategy.last
case x if x startsWith "org/apache/commons" =>
MergeStrategy.last
case x if x startsWith "org/apache/xmlcommons" =>
MergeStrategy.last
case x if x startsWith "org/xml/sax" =>
MergeStrategy.last
case x if x startsWith "org/w3c/dom" =>
MergeStrategy.last
case x => old(x)
}
}
Run Code Online (Sandbox Code Playgroud)
需要最后几行来修复nutch和hadoop之间的一些冲突.
打包Akka应用程序的正确方法是什么?
截至 2013 年 11 月,sbt-assemble的最新版本是 sbt 0.13 的0.10.1。\n使用这个,我能够使用默认合并策略使用最新稳定的 Akka 2.2.3 创建一个 fat jar。
\n\n项目/构建.属性:
\n\nsbt.version=0.13.0\nRun Code Online (Sandbox Code Playgroud)\n\n项目/程序集.sbt:
\n\naddSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.10.1")\nRun Code Online (Sandbox Code Playgroud)\n\n程序集.sbt:
\n\nimport AssemblyKeys._\n\nassemblySettings\nRun Code Online (Sandbox Code Playgroud)\n\n构建.sbt:
\n\nname := "sbt-assembly-akka-sample"\n\nversion := "0.1.0-SNAPSHOT"\n\nscalaVersion := "2.10.3"\n\nlibraryDependencies ++= Seq(\n "com.typesafe.akka" %% "akka-actor" % "2.2.3",\n "com.typesafe.akka" %% "akka-remote" % "2.2.3"\n)\nRun Code Online (Sandbox Code Playgroud)\n\nsrc/main/scala/actor.scala:
\n\npackage hello\n\nimport akka.actor.{Actor, Props}\nimport akka.event.Logging\n\nclass MyActor extends Actor {\n val log = Logging(context.system, this)\n def receive = {\n case "test" \xe2\x87\x92 log.info("received test")\n case _ \xe2\x87\x92 log.info("received unknown message")\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\nsrc/main/scala/app.scala:
\n\npackage hello\n\nobject Main extends App {\n import akka.actor.{ActorSystem, Props}\n val system = ActorSystem("mySystem")\n val myActor = system.actorOf(Props[MyActor], "myactor")\n myActor ! "test"\n}\nRun Code Online (Sandbox Code Playgroud)\n\n这是我通过运行得到的结果assembly:
> assembly\n[info] Updating {file:/xxx/sbt-assembly-01/}sbt-assembly-01...\n[info] Resolving org.fusesource.jansi#jansi;1.4 ...\n[info] Done updating.\n[info] Compiling 2 Scala sources to /xxx/sbt-assembly-01/target/scala-2.10/classes...\n[info] Including: uncommons-maths-1.2.2a.jar\n[info] Including: protobuf-java-2.4.1.jar\n[info] Including: config-1.0.2.jar\n[info] Including: netty-3.6.6.Final.jar\n[info] Including: akka-remote_2.10-2.2.3.jar\n[info] Including: akka-actor_2.10-2.2.3.jar\n[info] Passed: Total 0, Failed 0, Errors 0, Passed 0\n[info] No tests to run for test:test\n[info] Including: scala-library-2.10.3.jar\n[info] Checking every *.class/*.jar file\'s SHA-1.\n[info] Merging files...\n[warn] Merging \'META-INF/NOTICE.txt\' with strategy \'rename\'\n[warn] Merging \'META-INF/license\' with strategy \'rename\'\n[warn] Merging \'META-INF/LICENSE.txt\' with strategy \'rename\'\n[warn] Merging \'META-INF/MANIFEST.MF\' with strategy \'discard\'\n[warn] Merging \'reference.conf\' with strategy \'concat\'\n[warn] Strategy \'concat\' was applied to a file\n[warn] Strategy \'discard\' was applied to a file\n[warn] Strategy \'rename\' was applied to 3 files\n[info] SHA-1: 1e9dcebeddc8e2a7d41a0c55a663f9ca0000000\n[info] Packaging /xxx/sbt-assembly-01/target/scala-2.10/sbt-assembly-akka-sample-assembly-0.1.0-SNAPSHOT.jar ...\n[info] Done packaging.\n[success] Total time: 13 s, completed Nov 11, 2013 8:57:18 PM\nRun Code Online (Sandbox Code Playgroud)\n\n这是运行 jar 的样子:
\n\n$ java -jar target/scala-2.10/sbt-assembly-akka-sample-assembly-0.1.0-SNAPSHOT.jar\n[INFO] [11/11/2013 20:59:48.265] [mySystem-akka.actor.default-dispatcher-2] [akka://mySystem/user/myactor] received test\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
3906 次 |
| 最近记录: |