Akka を使用していくつかの外部アプリケーションと通信する Nutch プラグインを作成する必要があります。これを行うには、プラグインをファット Jar としてパッケージ化する必要があります - 私はsbt-assemblyバージョン 0.8.3 を使用しています。
プラグインを実行しようとすると、例外が発生します
com.typesafe.config.ConfigException$Missing: No configuration setting found for key 'akka'
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)
}
}
最後の行は、nutch と hadoop の間の競合を修正するために必要です。
Akka アプリケーションをパッケージ化する正しい方法は何ですか?