Я создал приложение (командной строки) в Scala, которое я хочу распространять в виде отдельного JAR-файла.Я создаю его с помощью sbt:
import sbt._
class Project(info: ProjectInfo) extends DefaultProject(info) with ProguardProject {
override def parallelExecution = true
override def mainClass: Option[String] = // whatever
override def libraryDependencies = Set(
// whatever
) ++ super.libraryDependencies
override def proguardOptions = List(
"-keepclasseswithmembers public class * { public static void main(java.lang.String[]); }",
"-dontoptimize",
"-dontobfuscate",
proguardKeepLimitedSerializability,
proguardKeepAllScala,
"-keep interface scala.ScalaObject"
)
}
Я могу запустить свой код с sbt run
отлично, и я могу упаковать его и запустить ProGuard поверх него (меня не интересует запутывание - проектв любом случае будет с открытым исходным кодом), я просто использую его для создания автономного JAR).Итак, я в итоге получаю файл .min.jar, встроенный в target / scala_2.8.0 /
Вот где все становится сложнее.Если я запускаю этот JAR, я получаю:
Исключение в потоке "main" java.lang.SecurityException: неверный дайджест файла подписи для основных атрибутов Manifest
Хорошо, яЯ не подписал его.
Итак, я генерирую себе ключ подписи следующим образом:
keytool -keystore ~/.keystore -genkey -alias tom
И затем, следуя документации Java, я пытаюсь подписать JAR:
jarsigner -signedjar [whatever].jar -keystore ~/.keystore target/scala_2.8.0/[whatever]-1.0.min.jar tom
Это подсказывает мне:
Enter Passphrase for keystore:
Warning:
The signer certificate will expire within six months.
Хорошо, все в порядке.Теперь, конечно, он будет работать!
$ java -jar [whatever].jar
Exception in thread "main" java.lang.SecurityException: Invalid signature file digest for Manifest main attributes
Я понятия не имею, с чего начать.Я относительно новичок в платформе Java.