我有一个使用Spring Boot创建的Web应用程序。我添加了碧玉报告,iText和bouncycastle maven依赖项。 Jasper和iText都包含bouncycastle库,因此,该Web应用程序无法正常工作。
错误是:java.security.NoSuchProviderException:JCE无法认证提供者BC。请注意,我已经添加了以下代码: Security.addProvider(new BouncyCastleProvider());
这在使用Spring Boot嵌入式tomcat时非常有效,但在导出到在wildfly服务器上运行的war文件时却无法使用。
这是我声明pom的方式。
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcpkix-jdk15on</artifactId>
<version>1.58</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.13</version>
</dependency>
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports</artifactId>
<version>6.4.0</version>
<exclusions>
<exclusion>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk14</artifactId>
</exclusion>
<exclusion>
<groupId>org.bouncycastle</groupId>
<artifactId>bcmail-jdk14</artifactId>
</exclusion>
</exclusions>
</dependency>
创建战争文件后,这是包含的库的列表:
bcpkix-jdk15on并未包含在内,即使我按提供的方式指定了
答案 0 :(得分:1)
直接引用Maven docs
提供
这很像编译,但是表明您希望JDK或容器在运行时提供依赖项。例如,在为Java Enterprise Edition构建Web应用程序时,您将对Servlet API和相关Java EE API的依赖关系设置为提供的范围,因为Web容器提供了这些类。此作用域仅在编译和测试类路径上可用,并且不可传递。
换句话说,它使用标记为“已提供”的.jar来编译(和测试)您的软件,但是当打包时,它将不包含在.war中:您期望运行时系统提供这些类的(可能不同)版本。
尝试删除将依赖项的范围更改为“编译”,以查看是否可以解决您的问题。