Tôi đã xây dựng một ứng dụng (dòng lệnh) trong Scala mà tôi muốn phân phối dưới dạng một JAR độc lập. Tôi đang xây dựng nó với SBT:Tôi làm cách nào để ký các JAR độc lập của 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"
)
}
tôi có thể chạy mã của tôi với sbt run
tốt, và tôi có thể gói nó và chạy ProGuard trên nó (Tôi không quan tâm đến việc Obfuscating - dự án sẽ được mở nguồn anyway), tôi chỉ sử dụng nó để tạo ra một JAR độc lập). Vì vậy, cuối cùng tôi nhận được tệp .min.jar được tạo trong target/scala_2.8.0/
Đây là nơi nó trở nên phức tạp. Nếu tôi chạy JAR này, tôi nhận được:
ngoại lệ trong chủ đề java.lang.SecurityException "chính": tập tin chữ ký không hợp lệ tiêu hóa cho các thuộc tính chính Manifest
Được rồi, tôi chưa ký vào đó.
Vì vậy, tôi tạo ra bản thân mình một phím ký như sau:
keytool -keystore ~/.keystore -genkey -alias tom
Và sau đó, sau khi tài liệu Java, tôi cố gắng ký JAR:
jarsigner -signedjar [whatever].jar -keystore ~/.keystore target/scala_2.8.0/[whatever]-1.0.min.jar tom
Nó nhắc nhở tôi:
Enter Passphrase for keystore:
Warning:
The signer certificate will expire within six months.
OK, được rồi. Bây giờ, chắc chắn, nó sẽ chạy!
$ java -jar [whatever].jar
Exception in thread "main" java.lang.SecurityException: Invalid signature file digest for Manifest main attributes
Tôi không biết bắt đầu từ đâu. Tôi tương đối mới với nền tảng Java.
Tôi nghĩ rằng vấn đề là bình thường không thể chứa lọ, nếu tôi nhớ chính xác, trong khi ProGuard tạo ra lọ có thể. – pr1001
Tôi thấy, vì vậy anh ta chỉ cần giải nén scala-library.jar vào bình của mình? –