J'ai construit une application (en ligne de commande) dans Scala que je veux distribuer en tant que JAR autonome. Je construis avec SBT:Comment signer mes fichiers JAR autonomes Scala de 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"
)
}
je peux exécuter mon code avec sbt run
bien, et je peux emballer et courir ProGuard dessus (je ne suis pas intéressé par obscurcissant - le projet va être ouvert source quand même), je l'utilise juste pour produire un JAR autonome). Donc, j'obtiens finalement un fichier .min.jar construit dans target/scala_2.8.0/
C'est là que ça devient compliqué. Si je lance ce JAR, je reçois:
Exception dans le thread "principal" java.lang.SecurityException: fichier de signature non valide pour les attributs principaux digest Manifest
D'accord, je ne l'ai pas signé.
Alors, je me produis une clé de signature comme suit:
keytool -keystore ~/.keystore -genkey -alias tom
Et puis, après la documentation Java, je tente de signer le JAR:
jarsigner -signedjar [whatever].jar -keystore ~/.keystore target/scala_2.8.0/[whatever]-1.0.min.jar tom
Il me demande:
Enter Passphrase for keystore:
Warning:
The signer certificate will expire within six months.
D'accord, c'est bien. Maintenant, sûrement, ça va courir!
$ java -jar [whatever].jar
Exception in thread "main" java.lang.SecurityException: Invalid signature file digest for Manifest main attributes
Je n'ai aucune idée par où commencer. Je suis relativement nouveau sur la plateforme Java.
Je pense que le problème est que les bocaux ne peuvent normalement pas contenir de bocaux, si je me souviens bien, alors que ProGuard crée des bocaux qui le peuvent. – pr1001
Je vois, donc il a juste besoin de décompresser scala-library.jar dans son pot? –