java - 如何签署我的 ProGuard'ed Scala 独立 JAR?

标签 java scala jar proguard sbt

我在 Scala 中构建了一个(命令行)应用程序,我想将其作为独立的 JAR 进行分发。我正在用 sbt 构建它:

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"
  )
}

我可以使用 sbt run 运行我的代码,我可以打包它并在其上运行 ProGuard(我对混淆不感兴趣 - 该项目无论如何都将是开源的),我只是用它来生成一个独立的 JAR)。所以,我最终得到了一个内置于 target/scala_2.8.0/中的 .min.jar 文件

这就是它变得复杂的地方。如果我运行这个 JAR,我会得到:

Exception in thread "main" java.lang.SecurityException: Invalid signature file digest for Manifest main attributes

好吧,我还没有签名。

所以,我自己生成了一个签名 key ,如下所示:

keytool -keystore ~/.keystore -genkey -alias tom

然后,按照 Java 文档,我尝试签署 JAR:

jarsigner -signedjar [whatever].jar -keystore ~/.keystore target/scala_2.8.0/[whatever]-1.0.min.jar tom

它提示我:

Enter Passphrase for keystore: 

Warning: 
The signer certificate will expire within six months.

好的,没关系。现在,它肯定会运行!

$ java -jar [whatever].jar
Exception in thread "main" java.lang.SecurityException: Invalid signature file digest for Manifest main attributes

我不知道从哪里开始。我对 Java 平台比较陌生。

最佳答案

我认为您不需要 ProGuard 和签名来生成独立的 jar。你可以只打包你需要的所有类和一个 META-INF 目录,在一个 zip 文件中设置适当的类路径和主类,将它重命名为 jar,它应该运行。参见 this tutorial .

对不起,我没有回答你的问题,我只是不明白你为什么要签署你的 jar 。

关于java - 如何签署我的 ProGuard'ed Scala 独立 JAR?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3292904/

相关文章:

java - Maven 插件依赖项

java - instanceof 与 boolean 类型检查

java - 如何使用 tectia 和 ksh 设置类路径?

parsing - Scala StandardTokenParsers 与 JavaTokenParsers

java - 在非 Debug模式下运行 jar

java - Maven错误: Package matlabcontrol does not exist

java - 将基类对象转换为扩展基类的类时出现 ClassCastException

json - 使用 Lift-JSON 解析动态值

scala - 使用 ReactiveMongo 和 Scala 更新插入许多记录

java - 访问 JAR 内的资源