我的java程序打包在一个jar文件中,并使用外部jar库,bouncy castle.我的代码编译得很好,但是运行jar会导致以下错误:
线程"main"中的异常java.lang.SecurityException:Manifest主要属性的签名文件摘要无效
我用谷歌搜索了一个多小时寻找解释,发现很少有价值.如果有人以前看过这个错误并且可以提供一些帮助,我将不得不承担责任.
我编译了一个JAR文件并在清单中指定了Main-Class(我使用了Eclipse Export函数).我的依赖项都在标记的目录中lib.我似乎无法得到关于如何执行我的JAR文件的直接答案,同时指定它应该使用lib/*作为类路径.
我试过了:
]$ java -jar -cp .:lib/* MyJar.jar
]$ java -cp .:lib/* -jar MyJar.jar
]$ java -cp .:lib/* com.somepackage.subpackage.Main
Run Code Online (Sandbox Code Playgroud)
等等...
每个都给出一个错误说:
Error: Could not find or load main class ....
或者NoClassDefFoundError表示没有找到库.
我甚至尝试重新制作JAR文件并包含lib目录和内容,但仍然没有骰子......
如何从命令行执行JAR文件并指定要使用的类路径?
Sun的PKCS11 JCE安全提供程序缺少我们需要的一些功能.
所以我使用原始资源编写了一个增强版本.
遗憾的是,JCE基础结构拒绝新的提供程序
"JCE无法对提供程序进行身份验证",
因为它未正确签名.
javax.crypto.JceSecurity.verifyProviderJar(...)抛出.
(它叫javax.crypto.JarVerifier.verify())
有关如何签署新提供商以使其与JCE一起使用的任何建议?
我开发了一个应用程序,在 BountyCastle.jar 的帮助下使用了密码学。我还有一行 Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
当我从 Netbeans 执行程序时一切正常
但是当我将应用程序打包到内部使用 BouncyCastle jar 的可执行 jar 并执行该 jar 时,
我遇到异常
JCE 无法验证提供者 BC java.lang.SecurityException: JCE 无法验证提供者 BC
是否还有其他方法可以实现相同的效果。因为非技术人员很难将BountyCastle.jar添加到jre的ext文件夹中。那么还有其他方法可以解决我的问题吗?
在 netbeans 中打包 jar 时,是否有任何方法可以排除 BountyCastle.jar,以便可以从外部 lib 文件夹访问。
我正在使用 Maven Shade 插件创建一个胖罐子,其中也包括一些充气城堡罐子。但这会产生问题,因为 Bouncy Castle 的未签名版本。
java.lang.SecurityException:JCE 无法验证提供者 BC
现在解决方案之一是拥有依赖项的外部文件夹并在 fat jar 的清单文件中定义此类路径。
例如:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.4.3</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<artifactSet>
<excludes>
<exclude>org.bouncycastle:*:*:*</exclude>
</excludes>
</artifactSet>
<finalName>Relay-S3-Monitor-jar-with-dependencies</finalName>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>at.seresunit.lecturemanager_connector.App</mainClass>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.handlers</resource>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.schemas</resource>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<manifestEntries>
<Main-Class>com.pb.relay.s3.CamelBoot</Main-Class>
<Class-Path>. bouncycastle_libs/bcpg-jdk15on-1.55.jar bouncycastle_libs/bcprov-jdk15on-1.55.jar bouncycastle_libs/bcprov-jdk16-1.45.jar</Class-Path>
</manifestEntries>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin
Run Code Online (Sandbox Code Playgroud)
现在我需要的是:在同一个 pom.xml 中,我需要插入一个创建依赖项文件夹的部分(插件)(仅包含 bouncy castle jar)
java ×4
bouncycastle ×2
classpath ×1
command-line ×1
jar ×1
jce ×1
maven ×1
security ×1
shell ×1