2017-04-04 184 views
2

我正在使用maven遮罩插件創建一個胖罐子,其中也包括一些充氣城堡罐子。但是由於Bouncy Castle的未簽名版本,這造成了問題。使用Maven Shade插件創建依賴文件夾與依賴jar包

java.lang.SecurityException異常:JCE無法驗證提供商BC

現在的方案之一是有依賴的外部文件夾,並定義脂肪罐子manifest文件這一類路徑。

例如:

<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中,我需要插入分節(插件)創建depencies文件夾(只充氣城堡JAR)

回答

1

我看到了同樣的錯誤在編譯的BouncyCastle的依靠一位超級罐子時:

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

我在你的情況知道你是好與出口罐到一個單獨的目錄,但對於那些有興趣在單罐,問題是,Maven的樹蔭插件爆炸打破加密簽名的jar文件(詳細信息,請參見this explanation)。

您可以改爲使用使用jar-in-jar方法的executable packer maven plugin solution,它在單個可執行的jar中保留JCE的簽名。