2016-06-16 7 views
3

У меня есть проект Java со встроенным сервером причала и библиотекой трикотажа для служб REST. Я использую Intellij для запуска проекта и его работы. Проблема заключается в том, что я пытаюсь выполнить сгенерированный файл jar.Ошибка при выполнении сгенерированного файла jar

Итак, я написал задачу для создания файла jar в файле build.gradle. Ниже задача в 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' 
    } 
} 

Файл баночка генерируется при запуске следующей команды

gradle clean build fatJar 

я столкнулся ниже ошибки, когда я пытаюсь сгенерированный файл банку с помощью команда

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

Это, скорее всего, результат объединения сторонних библиотек, которые были подписаны для предотвращения несанкционированного доступа. Вероятно, ваш комплект, включая файлы подписи из этих банок в манифесте «жира». Вы можете явно исключить файлы сигнатур, используя директиву как:

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

связанный с этим вопрос: "Invalid signature file" when attempting to run a .jar

+0

Thats perfect. Это сработало. Спасибо – Maverick

+0

Где добавить, чтобы добавить эту строку? В build.gradle? Я получаю синтаксическую ошибку при добавлении этого в build.gradle, вы можете вставить образец build.gradle с этой строкой. –

+0

Arjun, директива exclude должна быть добавлена ​​в конфигурацию плагина JAR в файле build.gradle. См. Документацию [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

Вы сказали, что вы создали файл фляги, и вы пытаетесь запустить .rar файл с помощью Java -jar.

 Смежные вопросы

  • Нет связанных вопросов^_^