Ich habe eine (Befehlszeilen-) Anwendung in Scala erstellt, die ich als eigenständige JAR verteilen möchte. Ich baue es mit sbt:Wie unterzeichne ich meine ProGuard'ed Scala Stand-Alone-JARs?
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"
)
}
Ich kann meinen Code mit sbt run
gut laufen, und ich kann es packen und laufen ProGuard über sie (ich in Verschleiern bin nicht interessiert - das Projekt wird geöffnet sein Quelle), verwende ich es nur, um eine eigenständige JAR zu erzeugen). Also, ich bekomme schließlich eine .min.jar-Datei in Ziel/scala_2.8.0/
Dies ist, wo es kompliziert wird. Wenn ich diese JAR laufen, erhalte ich:
Exception in thread "main" java.lang.SecurityException: Ungültige Signaturdatei für Manifest Hauptattribute verdauen
Okay, habe ich unterschrieben nicht.
Also, ich erzeuge ich einen Signaturschlüssel wie folgt:
keytool -keystore ~/.keystore -genkey -alias tom
Und dann, nach der Java-Dokumentation, ich versuche, die JAR zu unterzeichnen:
jarsigner -signedjar [whatever].jar -keystore ~/.keystore target/scala_2.8.0/[whatever]-1.0.min.jar tom
Es fordert mich:
Enter Passphrase for keystore:
Warning:
The signer certificate will expire within six months.
Okay, das ist in Ordnung. Jetzt wird es sicher laufen!
$ java -jar [whatever].jar
Exception in thread "main" java.lang.SecurityException: Invalid signature file digest for Manifest main attributes
Ich habe keine Ahnung, wo ich anfangen soll. Ich bin relativ neu in der Java-Plattform.
Ich denke, das Problem ist, dass Gläser normalerweise Gläser nicht enthalten können, wenn ich mich richtig erinnere, während ProGuard Gläser herstellt, die können. – pr1001
Ich sehe, also muss er nur scala-library.jar in sein Glas auspacken? –