2016-06-16 38 views
3

RESTサービス用のjettyサーバーとジャージーライブラリが組み込まれたJavaプロジェクトがあります。私はIntellijを使ってプロジェクトを実行しています。 問題は、生成されたjarファイルを実行しようとするときです。生成されたjarファイルの実行中にエラーが発生しました

したがって、build.gradleファイルにjarファイルを生成するタスクを作成しました。以下は、私は以下のコマンド

gradle clean build fatJar 

を実行したときに、私が使用して生成されたjarファイルにしようとしたとき、私は以下のエラーが直面していますjarファイルが生成されbuild.gradleでタスク

task fatJar(type: Jar) { 
    baseName = project.name + '-all' 
    from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } } 
    with jar 
    manifest { 
     attributes 'Implementation-Title': 'Gradle Quickstart', 'Implementation-Version': 1.0 
     attributes 'Main-Class': 'EmbeddedJetty.EmbeddedJettyMain' 
    } 
} 

ですコマンド

java -jar projectname.rar 

Error: A JNI error has occurred, please check your installation and try again 
Exception in thread "main" java.lang.SecurityException: Invalid signature file digest for Manifest main attributes 
    at sun.security.util.SignatureFileVerifier.processImpl(SignatureFileVerifier.java:284) 
    at sun.security.util.SignatureFileVerifier.process(SignatureFileVerifier.java:238) 
    at java.util.jar.JarVerifier.processEntry(JarVerifier.java:273) 
    at java.util.jar.JarVerifier.update(JarVerifier.java:228) 
    at java.util.jar.JarFile.initializeVerifier(JarFile.java:383) 
    at java.util.jar.JarFile.getInputStream(JarFile.java:450) 
    at sun.misc.URLClassPath$JarLoader$2.getInputStream(URLClassPath.java:940) 
    at sun.misc.Resource.cachedInputStream(Resource.java:77) 
    at sun.misc.Resource.getByteBuffer(Resource.java:160) 
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:454) 
    at java.net.URLClassLoader.access$100(URLClassLoader.java:73) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:368) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:362) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:361) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:495) 

問題の可能性がありますか?

答えて

5

これは、改ざんを防止するために署名されたサードパーティライブラリジャーナルをバンドルしたことが原因と考えられます。バンドルには、これらのjarファイルのシグネチャファイルが、あなたの 'fat' jarsマニフェストに含まれている可能性があります。明示的のようなディレクティブを使用して署名ファイルを除外することができます。

exclude 'META-INF/*.RSA', 'META-INF/*.SF','META-INF/*.DSA'

関連する質問:"Invalid signature file" when attempting to run a .jar

+0

それは完璧です。出来た。ありがとう – Maverick

+0

どこにこの行を追加するには? build.gradleでは?これをbuild.gradleに追加する際に構文エラーが発生しました。この行でサンプルbuild.gradleを貼り付けることができますか。 –

+0

Arjunでは、build.gradleファイルのJARプラグイン設定にexcludeディレクティブを追加する必要があります。 exclude(s)のプロパティ/メソッドについては、[JAR plugin documentation](https://docs.gradle.org/3.5/dsl/org.gradle.api.tasks.bundling.Jar.html)を参照してください。また、[この回答](http://stackoverflow.com/a/14441628/1772794)には簡単な例が含まれています。 – dkichler

0

は、あなたはjarファイルを生成し、Javaの-jarを使用しての.rarファイルを実行しようとしていると述べました。

関連する問題