Создайте папку зависимостей с зависимыми банками с плагином Maven Shade

Я создаю толстую банку, используя плагин maven shadow, который также включает в себя несколько банок с надувным замком. Но это создает проблему из-за неподписанной версии Bouncy Castle.

java.lang.SecurityException: JCE не может аутентифицировать поставщика BC

Теперь одним из решений является наличие внешней папки зависимостей и определение пути к этому классу в файле манифеста толстой банки.

Например:

<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

Теперь, что мне нужно: в том же pom.xml мне нужно вставить раздел (плагин), который создает папку зависимостей (только с надувной банкой замка)


person Pulkit Anchalia    schedule 04.04.2017    source источник


Ответы (3)


С плагином зависимостей вы можете вызвать dependency:copy, чтобы скопировать зависимость в папку.

https://maven.apache.org/plugins/maven-dependency-plugin/copy-mojo.html

person J Fabian Meier    schedule 04.04.2017
comment
это просто спасло положение :) - person ademg; 12.09.2017

Я видел ту же ошибку при компиляции банки Uber, основанной на BouncyCastle:

Exception in thread "main" java.security.NoSuchProviderException: JCE cannot authenticate the provider BC

Я понимаю, что в вашем случае вы хорошо экспортировали jar-файлы в отдельный каталог, но для тех, кто интересуется одним jar-файлом, проблема заключается в том, что плагин Shade Maven взрывает jar-файлы, что нарушает криптографическую подпись (это объяснение для подробностей).

Вместо этого вы можете использовать исполняемое решение плагина maven для упаковщика, которое использует подход jar-in-jar, который сохраняет подпись для JCE в единая исполняемая банка.

person MattW    schedule 19.09.2017

Если вы ищете решение Fat JAR без распаковки библиотек, но со специальным загрузчиком классов JAR, взгляните на мой проект здесь.

Отказ от ответственности: я не писал код, просто упаковал его и опубликовал на Maven Central, а в моем файле для чтения описал, как его использовать.

Я лично использую его для создания исполняемых JAR-файлов uber, содержащих зависимости BouncyCastle. Возможно, это полезно и для вас.

person kriegaex    schedule 04.08.2018