Как упаковать проект akka для расширения netlogo?
Я пытаюсь сделать простое расширение NetLogo, основанное на akka. Однако всякий раз, когда я пытаюсь загрузить расширение в NetLogo, я получаю сообщение об ошибке:
Caused by: com.typesafe.config.ConfigException$Missing: No configuration setting found for key 'akka.version'
Что, очевидно, означает, что какая-то конфигурация отсутствует. Затем я продолжил добавлять файл reference.conf в свою папку ресурсов, но безуспешно.
Последнее, что я попробовал, - это использовал плагин sbt -assemblty, но я продолжаю получать ту же ошибку. Так что это мой build.sbt:
name := "TestAkka"
version := "1.0"
scalaVersion := "2.11.7"
scalaSource in Compile <<= baseDirectory(_ / "src")
scalacOptions ++= Seq("-deprecation", "-unchecked", "-Xfatal-warnings",
"-encoding", "us-ascii")
libraryDependencies ++= Seq(
"org.nlogo" % "NetLogo" % "5.3.0" from
"http://ccl.northwestern.edu/devel/NetLogo-5.3-17964bb.jar",
"asm" % "asm-all" % "3.3.1",
"org.picocontainer" % "picocontainer" % "2.13.6",
"com.typesafe" % "config" % "1.3.0",
"com.typesafe.akka" %% "akka-actor" % "2.4.1",
"com.typesafe.akka" %% "akka-remote" % "2.4.1"
)
artifactName := { (_, _, _) => "sample-scala.jar" }
packageOptions := Seq(
Package.ManifestAttributes(
("Extension-Name", "sample-scala"),
("Class-Manager", "main.scala.akkatest.TestClassManager"),
("NetLogo-Extension-API-Version", "5.3")))
packageBin in Compile <<= (packageBin in Compile, baseDirectory, streams) map {
(jar, base, s) =>
IO.copyFile(jar, base / "sample-scala.jar")
Process("pack200 --modification-time=latest --effort=9 --strip-debug " +
"--no-keep-file-order --unknown-attribute=strip " +
"sample-scala.jar.pack.gz sample-scala.jar").!!
if(Process("git diff --quiet --exit-code HEAD").! == 0) {
Process("git archive -o sample-scala.zip --prefix=sample-scala/ HEAD").!!
IO.createDirectory(base / "sample-scala")
IO.copyFile(base / "sample-scala.jar", base / "sample-scala" / "sample-scala.jar")
IO.copyFile(base / "sample-scala.jar.pack.gz", base / "sample-scala" / "sample-scala.jar.pack.gz")
Process("zip sample-scala.zip sample-scala/sample-scala.jar sample-scala/sample-scala.jar.pack.gz").!!
IO.delete(base / "sample-scala")
}
else {
s.log.warn("working tree not clean; no zip archive made")
IO.delete(base / "sample-scala.zip")
}
jar
}
cleanFiles <++= baseDirectory { base =>
Seq(base / "sample-scala.jar",
base / "sample-scala.jar.pack.gz",
base / "sample-scala.zip") }
У меня есть проект / assembly.sbt с содержанием:
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.1")
У меня есть Assembly.sbt в корне с содержанием:
import sbtassembly.AssemblyKeys._
baseAssemblySettings
В моем скала коде у меня есть:
val configString = ConfigFactory.parseString(
"""
akka {
loglevel = "INFO"
actor {
provider = "akka.remote.RemoteActorRefProvider"
}
remote {
enabled-transports = ["akka.remote.netty.tcp"]
netty.tcp {
hostname = "127.0.0.1"
port = "9500"
}
log-sent-messages = on
log-received-messages = on
}
}
""".stripMargin)
val config = ConfigFactory.load(configString)
Папка ресурсов содержит файл application.conf, который я не использую в данный момент. Отображение вывода команды jar tf с выражением "reference" ясно показывает, что присутствует reference.conf:
Как мне упаковать этот пример akka для расширения netlogo?
Примечание: я включил akka-actor и akka-remote в качестве зависимостей библиотеки. Я использую Intellij и SBT 0.13.8 на платформе OS X.
РЕДАКТИРОВАТЬ: После получения совета от Аюш, я получаю следующий вывод из команды sbt сборка, однако то же исключение по-прежнему присутствует:
2 ответа
Я думаю, проблема в том, что при использовании sbt:assembly стандартная стратегия слияния исключает все файлы reference.conf. Это то, что я нашел в документации.
Если несколько файлов имеют один и тот же относительный путь (например, ресурс с именем application.conf в JAR-файлах с несколькими зависимостями), стратегия по умолчанию заключается в проверке того, что все кандидаты имеют одинаковое содержимое, и в противном случае выдает ошибку.
Можете ли вы попробовать добавить MergeStrategy следующим образом
assemblyMergeStrategy in assembly := {
case PathList("reference.conf") => MergeStrategy.concat
}
есть дополнительный трюк для решения этой проблемы с более новыми библиотеками akka, поскольку akka не включает все свои конфигурации по умолчанию в resource.conf
/questions/5762548/ne-najden-parametr-konfiguratsii-dlya-klyucha-akkaversion/62681640#62681640