Конфликты зависимости Bouncycastle - PullRequest
0 голосов
/ 31 октября 2018

У меня есть веб-приложение, созданное с помощью весенней загрузки. Я добавил отчет о яшме, iText и зависимость от bouncycastle maven. Jasper и iText содержат библиотеки bouncycastle, и теперь из-за этого веб-приложение работает неправильно.

Ошибка: java.security.NoSuchProviderException: JCE не может аутентифицировать поставщика BC. Обратите внимание, что я уже добавил этот код: Security.addProvider (новый BouncyCastleProvider ());

Это прекрасно работает с использованием встроенного tomcat с весенней загрузкой, но не при экспорте в файл war, работающий на сервере wildfly.

Вот как я объявляю пом.

<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>

При создании файла войны, это список библиотек, включенных:

  • bcmail-jdk14-138
  • bcprov-jdk14-138

bcpkix-jdk15on не включается, даже если я его укажу как указано

1 Ответ

0 голосов
/ 31 октября 2018

Цитировать прямо из Maven документов

при условии

Это очень похоже на компиляцию, но указывает, что вы ожидаете, что JDK или контейнер предоставят зависимость во время выполнения. Например, при создании веб-приложения для Java Enterprise Edition вы должны установить зависимость от API-интерфейса сервлета и связанных API-интерфейсов Java EE, так как веб-контейнер предоставляет эти классы. Эта область доступна только для пути к классам компиляции и тестирования и не является транзитивной.

Если перефразировать, он использует .jar, помеченный как «предоставленный», для компиляции (и тестирования) вашего программного обеспечения, но когда вы его упакуете, он не будет включен в .war: вы ожидаете, что система времени выполнения предоставит (предположительно другая) версия этих классов.

Попробуйте убрать изменение области действия этой зависимости на «compile», чтобы посмотреть, решит ли это вашу проблему.

...