Zbudowałem aplikację (wiersza poleceń) w Scali, którą chcę rozpowszechniać jako samodzielny plik JAR. Buduję go z SBT:Jak podpisać autonomiczne pliki JAR ProGuard'ed Scala?
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"
)
}
mogę uruchomić mój kod z sbt run
grzywny i mogę spakować go i uruchomić ProGuard nad nim (nie jestem zainteresowany kasował - projekt będzie otwarty źródło i tak), używam go tylko do tworzenia samodzielnego JAR). W końcu otrzymuję plik .min.jar wbudowany w obiekt docelowy/scala_2.8.0/
To tutaj staje się skomplikowane. Jeśli uruchomić ten słój, uzyskać:
Wyjątek w wątku „głównym” java.lang.SecurityException: Nieprawidłowy plik podpisu strawienia dla Oczywista głównych atrybutów
Ok, nie podpisał.
Więc wygenerować sobie klucz podpisujący się następująco:
keytool -keystore ~/.keystore -genkey -alias tom
a następnie poniższy dokumentacji Java, staram się podpisać słoika:
jarsigner -signedjar [whatever].jar -keystore ~/.keystore target/scala_2.8.0/[whatever]-1.0.min.jar tom
To skłania mnie:
Enter Passphrase for keystore:
Warning:
The signer certificate will expire within six months.
Dobra, w porządku. Teraz na pewno będzie działać!
$ java -jar [whatever].jar
Exception in thread "main" java.lang.SecurityException: Invalid signature file digest for Manifest main attributes
Nie mam pojęcia, od czego zacząć. Jestem stosunkowo nowy na platformie Java.
Myślę, że problem polega na tym, że słoiki zwykle nie mogą zawierać słoików, jeśli dobrze pamiętam, podczas gdy ProGuard tworzy słoiki, które mogą. – pr1001
Rozumiem, więc musi tylko rozpakować scala-library.jar do swojego słoika? –