Ho realizzato un'applicazione (da riga di comando) in Scala che voglio distribuire come JAR indipendente. Sto costruendo con SBT:Come posso firmare i miei JAR stand-alone di ProGuard?
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"
)
}
posso correre il mio codice con sbt run
bene, e posso pacchetto ed eseguire ProGuard su di esso (io non sono interessato a offuscare - il progetto sta per essere aperto fonte comunque), sto solo usando per produrre un JAR standalone). Così, alla fine ho ottenere un file .min.jar costruito nel target/scala_2.8.0/
Questo è dove diventa complicato. Se corro questo JAR, ottengo:
Exception in thread java.lang.SecurityException "principale": file di firma non valido digerire per Manifest attributi principali
Va bene, io non l'ha firmata.
Così, ho generare io stesso una chiave di firma come segue:
keytool -keystore ~/.keystore -genkey -alias tom
E poi, a seguito della documentazione di Java, cerco di firmare il JAR:
jarsigner -signedjar [whatever].jar -keystore ~/.keystore target/scala_2.8.0/[whatever]-1.0.min.jar tom
Mi chiede:
Enter Passphrase for keystore:
Warning:
The signer certificate will expire within six months.
Va bene, va bene. Ora, sicuramente, funzionerà!
$ java -jar [whatever].jar
Exception in thread "main" java.lang.SecurityException: Invalid signature file digest for Manifest main attributes
Non ho idea da dove cominciare. Sono relativamente nuovo alla piattaforma Java.
Credo che il problema è che i vasetti normalmente non possono contenere barattoli, se non ricordo male, mentre ProGuard crea vasi che possono. – pr1001
Vedo, quindi ha solo bisogno di decomprimere scala-library.jar nel suo barattolo? –