2017-04-04 2 views
2

Je crée un gros pot à l'aide du plugin maven shade, qui comprend également des pots de château gonflables. Mais cela crée le problème à cause de la version non signée de Bouncy Castle.Créer un dossier de dépendances avec des jarres dépendantes avec le plugin Maven Shade

java.lang.SecurityException: JCE ne peut pas authentifier le fournisseur BC

maintenant une de la solution est d'avoir le dossier externe des dépendances et de définir ce chemin de classe dans le fichier manifeste de pot de graisse.

Par exemple:

<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 

Maintenant ce que je besoin: dans le même pom.xml, je dois insérer une section (plug-in) qui crée le dossier depencies (avec seulement pot de château gonflable)

Répondre

1

je voyais la même erreur lors de la compilation d'un pot de uber qui reposait sur BouncyCastle:

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

Je me rends compte dans votre cas, vous étiez bien avec des pots exporter dans un répertoire distinct, mais pour ceux intéressés par le seul pot, le problème est que explose plugin ombre Maven les fichiers jar qui rompent la signature cryptographique (this explanation pour plus de détails).

Vous pouvez utiliser à la place le executable packer maven plugin solution qui utilise une approche jar-in-jar qui préserve la signature pour JCE dans un seul fichier exécutable.