6

スタンドアロン JAR として配布したい (コマンドライン) アプリケーションを Scala で作成しました。私は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 を実行すると、次のようになります。

スレッド「メイン」の例外 java.lang.SecurityException: マニフェストのメイン属性の署名ファイル ダイジェストが無効です

わかりました、私はそれに署名していません。

したがって、次のように署名キーを生成します。

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プラットフォームに比較的慣れていません。

4

2 に答える 2

1

スタンドアロンのjarを作成するために、ProGuardと署名は必要ないと思います。必要なすべてのクラスと、適切なクラスパスとメインクラスが設定されたMETA-INFディレクトリをzipファイルにパックし、名前をjarに変更すると、実行されます。このチュートリアルを参照してください。

申し訳ありませんが、私はあなたの質問に答えませんでした、私はあなたがあなたの瓶に署名したい理由を理解していません。

于 2010-07-20T18:53:06.127 に答える
1

私は同じ問題に遭遇しました。問題は、sun の jar 署名が proguard によって META-INF ディレクトリに追加されたことにあるようです。フィルタリングされたファイルにそれらを追加しました:

override def makeInJarFilter (file :String) =
  super.makeInJarFilter(file) + ",!**/SUN_MICR.RSA,!**/SUN_MICR.SF"

そしてそれは今完全に機能します。

于 2010-10-08T09:14:39.423 に答える