BouncyCastle 在 SpringMVC 中导致扫描超时

BouncyCastle causing scan timeout in SpringMVC

我 运行 在 Jetty 9.2.10.v20150310 中安装 SpringMVC 应用程序没有问题。 但是,一旦我添加了对 BouncyCastle 的依赖项,扫描就会永远进行并且服务器会超时。

我项目中只有一个BouncyCastle依赖

     <!-- bouncy castle -->
    <dependency>
        <groupId>org.bouncycastle</groupId>
        <artifactId>bcpkix-jdk15on</artifactId>
        <version>1.54</version>
    </dependency>

依赖关系树确认:

mvn dependency:tree -Dincludes=org.bouncycastle

产生:

[INFO] Building application-myapp 1.0.0-SNAPSHOT
[INFO] ------------------------------------------------------------------        ------
[INFO]
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ application-myapp ---
[INFO] com.my-company:application-myapp:war:1.0.0-SNAPSHOT
[INFO] \- org.bouncycastle:bcpkix-jdk15on:jar:1.54:compile
[INFO]    \- org.bouncycastle:bcprov-jdk15on:jar:1.54:compile
[INFO] ------------------------------------------------------------------    ------
[INFO] BUILD SUCCESS

有人看过这个吗?

注意:我也尝试了最新的 Jetty 版本 9.3.10.v20160621,结果相同

当我 运行 使用 -X 的 mvn:jetty 进程时,我看到它陷入了一个长循环扫描 BouncyCastle jar,基本上看到这样的输出大约两分钟:

[DEBUG] Scanning class from jar jar:file:///C:/Users/vgrazi/.m2/org/bouncycastle/bcprov-jdk15on/1.54/bcprov-jdk15on-1.54.jar!/org/bouncycastle/crypto/digests/SHA3Digest.class
[DEBUG] Scanning class from jar jar:file:///C:/Users/vgrazi/.m2/org/bouncycastle/bcprov-jdk15on/1.54/bcprov-jdk15on-1.54.jar!/org/bouncycastle/crypto/digests/SHA512Digest.class
[DEBUG] Scanning class from jar jar:file:///C:/Users/vgrazi/.m2/org/bouncycastle/bcprov-jdk15on/1.54/bcprov-jdk15on-1.54.jar!/org/bouncycastle/crypto/digests/SHA512tDigest.class
[DEBUG] Scanning class from jar jar:file:///C:/Users/vgrazi/.m2/org/bouncycastle/bcprov-jdk15on/1.54/bcprov-jdk15on-1.54.jar!/org/bouncycastle/crypto/digests/SHAKEDigest.class
[DEBUG] Scanning class from jar jar:file:///C:/Users/vgrazi/.m2/org/bouncycastle/bcprov-jdk15on/1.54/bcprov-jdk15on-1.54.jar!/org/bouncycastle/crypto/digests/SM3Digest.class
[DEBUG] Scanning class from jar jar:file:///C:/Users/vgrazi/.m2/org/bouncycastle/bcprov-jdk15on/1.54/bcprov-jdk15on-1.54.jar!/org/bouncycastle/crypto/digests/ShortenedDigest.class
[DEBUG] Scanning class from jar jar:file:///C:/Users/vgrazi/.m2/org/bouncycastle/bcprov-jdk15on/1.54/bcprov-jdk15on-1.54.jar!/org/bouncycastle/crypto/digests/SkeinDigest.class
[DEBUG] Closing JarFile C:\Users\vgrazi\.m2\org\bouncycastle\bcprov-jdk15on.54\bcprov-jdk15on-1.54.jar
[DEBUG] Closing JarFile C:\Users\vgrazi\.m2\org\bouncycastle\bcprov-jdk15on.54\bcprov-jdk15on-1.54.jar
[DEBUG] Closing JarFile C:\Users\vgrazi\.m2\org\bouncycastle\bcprov-jdk15on.54\bcprov-jdk15on-1.54.jar

我们通过从 jetty-maven-plugin 中删除 bouncycastle jar 来实现这一点。请注意 webInfIncludeJarPattern:

中的 "exclude" bouncycastle 前瞻正则表达式
<plugin>
  <groupId>org.eclipse.jetty</groupId>
  <artifactId>jetty-maven-plugin</artifactId>
  <version>${jetty.version}</version>
  <configuration combine.self="override">
      . . .
      <webApp>
        <contextPath>${jetty.context}</contextPath>
          <webInfIncludeJarPattern>^((?!bouncycastle).)*$</webInfIncludeJarPattern>
      </webApp>
      <jettyConfig>${jetty.xml}</jettyConfig>
       . . .