私は、スタンドアロンの実行可能な jar の形式で、Scala ランタイムを使用せずにサーバーに配布したい単純な Scala アプリケーションを作成しました。を介して呼び出された場合はすべて正常に動作しますSBT runが、 ではありませんjava -jar。
Java を介して jar を実行すると、次の未処理の例外が発生します。
Exception in thread "main" java.lang.AbstractMethodError: java.util.logging.Handler.publish(Ljava/util/logging/LogRecord;)V
at java.util.logging.Logger.log(Logger.java:458)
at net.lag.logging.Logger.log(Logger.scala:108)
at net.lag.logging.Logger.log(Logger.scala:91)
at net.lag.logging.Logger.info(Logger.scala:121)
at com.rentawebgeek.sitewiki.SiteWiki$.main(SiteWiki.scala:29)
at com.rentawebgeek.sitewiki.SiteWiki.main(SiteWiki.scala)
Exception in thread "Thread-0" java.lang.AbstractMethodError: java.util.logging.Handler.close()V
at java.util.logging.LogManager.resetLogger(LogManager.java:682)
at java.util.logging.LogManager.reset(LogManager.java:665)
at java.util.logging.LogManager$Cleaner.run(LogManager.java:223)
私は Configgy を使用しており、それはロガーであり、AbstractMethodErrorの javadocs に従って、シェルから呼び出しているものとは異なる Java バージョンを使用する Scala/SBT に関連している可能性があると考えました。ただし、java -versionand $JAVA_HOME/bin/java -version(何/usr/local/bin/scalaを使用するか) はどちらも 1.6.0_22 として一致します。
私のProGuardオプションは次のとおりです。
//program entry point
override def mainClass: Option[String] = Some("com.rentawebgeek.sitewiki.SiteWiki")
//proguard
override def proguardOptions = List(
"-keepclasseswithmembers public class * { public static void main(java.lang.String[]); }",
"-dontoptimize",
"-dontobfuscate",
"-keep class *",
proguardKeepLimitedSerializability,
proguardKeepAllScala,
"-keep interface scala.ScalaObject"
)
override def proguardInJars = Path.fromFile(scalaLibraryJar) +++ super.proguardInJars
このエラーを解決するにはどうすればよいですか? または、Scala を使用しないデプロイメント用に SBT プロジェクトから実行可能な jar をビルドする別の方法を見つけますか?