我的java程序打包在一个jar文件中,并使用外部jar库,bouncy castle.我的代码编译得很好,但是运行jar会导致以下错误:
线程"main"中的异常java.lang.SecurityException:Manifest主要属性的签名文件摘要无效
我用谷歌搜索了一个多小时寻找解释,发现很少有价值.如果有人以前看过这个错误并且可以提供一些帮助,我将不得不承担责任.
我从使用Eclipse的许多库的项目创建可运行JAR的过程已经完成.
导出> Runnable JAR>选择启动配置>将所需的库打包到生成的JAR>完成
这会在我的导出目标中创建一个JAR,我将其FTP到我的服务器并运行正常.
我最近因各种原因切换到IntelliJ,除了构建我的JAR之外,它在所有情况下都有所改进,这迫使我暂时回到日食.
使用IntelliJ I:
打开项目结构>工件,并从具有依赖项的模块创建新的JAR.然后,我的输出布局包含JAR的名称,其中的META-INF以及所有格式的库Extracted <lib.jar/>(抱歉,我无法上传此VPN上的屏幕截图.)
我构建我的工件(大约大15MB)并将其FTP到我的服务器,尝试运行它,我得到错误:
Exception in thread "main" java.lang.SecurityException: Invalid signature file digest for Manifest main attributes
Run Code Online (Sandbox Code Playgroud)
我如何模仿我在Eclipse中的表现?
编辑
创建的两个JAR差异很大:
我一直在使用各种配方来使用Maven POM 为JavaFX项目生成可运行的JAR文件.这些Stackoverflow问题中的每一个都描述了同样的问题.令人沮丧的是,针对同一目标似乎有几种不同的解决方案.
问题:
java.lang.SecurityException:Manifest主要属性的签名文件摘要无效
在命令行上执行JAR文件时出错.虽然Netbeans可以愉快地运行程序并调试程序.
诊断
有关于此的几个Stackoverflow和论坛问题(下面最有用的).尽管已知问题,但我还没有找到一个与JavaFX一起使用的明确解决方案.这些答案中描述的过程不是用于捆绑JavaFX JAR 的JavaFxPackager工具:
通常的方法:这个问题的帖子流行答案(撰写本文时为255票):在我们的项目中使用非 -JavaFX模块:
但是,当我们将相同的插件放在构建JavaFX JAR文件的POM中时,我们仍然得到:" 无效的签名文件摘要 ..."错误.具体来说,我<artifactId>maven-shade-plugin</artifactId>在JavaFxPackager exec规则之前和之后放置了第一个.结果是
**题*:
如何管理JavaFX应用程序.这是<build> sectionJavaFX 的POM Netbeans设置:
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.8</version>
<executions>
<execution>
<id>unpack-dependencies</id>
<phase>package</phase>
<goals>
<goal>unpack-dependencies</goal>
</goals>
<configuration>
<excludeScope>system</excludeScope>
<excludeGroupIds>junit,org.mockito,org.hamcrest</excludeGroupIds>
<outputDirectory>${project.build.directory}/classes</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.3.2</version>
<executions>
<execution>
<id>unpack-dependencies</id>
<phase>package</phase>
<goals>
<goal>exec</goal>
</goals> …Run Code Online (Sandbox Code Playgroud) 我在一个系统上使用IntelliJIDE armx64 linux-based,我正在处理一个非 Maven java 项目,该项目有很多链接到它的模块(依赖项)。当从 IDE 运行我的项目时,一切正常,但是当将其构建为可运行的 jar 文件并尝试使用从终端运行该 jar 时java -jar myjar.jar,我收到以下错误:
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:330)
at sun.security.util.SignatureFileVerifier.process(SignatureFileVerifier.java:263)
at java.util.jar.JarVerifier.processEntry(JarVerifier.java:318)
at java.util.jar.JarVerifier.update(JarVerifier.java:230)
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:977)
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 …Run Code Online (Sandbox Code Playgroud) 在 maven 中使用 shade-plugin 并稍后尝试使用 failsafe-plugin 运行集成测试时,当故障安全即将运行时,我收到以下错误,导致我的集成测试被跳过:
[ERROR] Invalid signature file digest for Manifest main attributes
Run Code Online (Sandbox Code Playgroud)
此错误似乎是由依赖项中的签名 jar 引起的。这个答案建议使用依赖插件过滤掉签名,但它似乎对我不起作用。Shade-plugin 只是解压了所有的依赖,并没有解决问题。我怎样才能使这项工作?