在类路径中找不到 Bouncy Castle,但在 Maven 中 运行 时有效
Bouncy Castle not found in classpath, but works when run in maven
这是一个非常奇怪的错误,我不知道如何修复它。
我正在使用 Bouncy Castle 库来解密密码。我在我的 maven pom.xml 中将其配置为:
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15</artifactId>
<version>1.46</version>
<scope>provided</scope>
</dependency>
提供范围是因为它是一个签名的jar。它是一个命令行应用程序,我使用 maven-assembly-plugin 生成一个包含所有依赖项的 jar。我不能包含它,因为作为签名的 jar,它会破坏签名验证。将其标记为 provided 它不包含在生成的 jar 中。
所以我尝试使用命令在类路径中传递它:
java -cp bcprov-jdk15-1.46.jar -jar my_executable.jar
但是当我 运行 时,我得到一个 Class 未找到异常:
java.lang.NoClassDefFoundError: org/bouncycastle/jce/provider/BouncyCastleProvider
我试过很多方法运行,但总是得到同样的错误。
但真正奇怪的是,我的单元测试使用库 运行 没问题。如果我键入 mvn test
,当我从命令行输入 运行 时失败的确切代码工作正常。如果我转到我的 ~/.m2
存储库并重命名 bcprov-jdk15-1.46.jar
,测试将失败并显示相同的 Class 未找到错误。
为什么我的代码可以 运行 从 maven 内部,但从带有依赖文件的 jar 中失败?我真的迷路了。
我解决了将 Bouncy Castle jar 放入 Java 安装中 $JAVA_HOME\lib\ext\
这是一个非常奇怪的错误,我不知道如何修复它。
我正在使用 Bouncy Castle 库来解密密码。我在我的 maven pom.xml 中将其配置为:
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15</artifactId>
<version>1.46</version>
<scope>provided</scope>
</dependency>
提供范围是因为它是一个签名的jar。它是一个命令行应用程序,我使用 maven-assembly-plugin 生成一个包含所有依赖项的 jar。我不能包含它,因为作为签名的 jar,它会破坏签名验证。将其标记为 provided 它不包含在生成的 jar 中。
所以我尝试使用命令在类路径中传递它:
java -cp bcprov-jdk15-1.46.jar -jar my_executable.jar
但是当我 运行 时,我得到一个 Class 未找到异常:
java.lang.NoClassDefFoundError: org/bouncycastle/jce/provider/BouncyCastleProvider
我试过很多方法运行,但总是得到同样的错误。
但真正奇怪的是,我的单元测试使用库 运行 没问题。如果我键入 mvn test
,当我从命令行输入 运行 时失败的确切代码工作正常。如果我转到我的 ~/.m2
存储库并重命名 bcprov-jdk15-1.46.jar
,测试将失败并显示相同的 Class 未找到错误。
为什么我的代码可以 运行 从 maven 内部,但从带有依赖文件的 jar 中失败?我真的迷路了。
我解决了将 Bouncy Castle jar 放入 Java 安装中 $JAVA_HOME\lib\ext\