Maven Shade 插件 + MsSQL JDBC -> 即时 JNI 错误 - 无效的签名文件清单

Posted

技术标签:

【中文标题】Maven Shade 插件 + MsSQL JDBC -> 即时 JNI 错误 - 无效的签名文件清单【英文标题】:Maven Shade Plugin + MsSQL JDBC -> instant JNI error - Invalid signature file Manifest 【发布时间】:2018-10-10 14:30:31 【问题描述】:

在我开始使用 MsSQL JDBC 之前,我的 Maven shade 插件运行良好

当我将 MsSql 添加到 pom.xml 并且我想运行应用程序时,我得到一个错误

错误:发生 JNI 错误,请检查您的安装并重试。

线程“主”java lang SecurityException 中的异常

Manifest 主要属性的签名文件摘要无效

有什么建议可以解决吗? 但是,Main 类是空的,只有一个简单的 main 方法。

 <build>
        <plugins>            

          <!-- Maven Shade Plugin -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>2.4.3</version>
                <executions>
                    <!-- Run shade goal on package phase -->
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <transformers>
                                <!-- add Main-Class to manifest file -->
                                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <mainClass>mdb.Main</mainClass>
                                </transformer>
                            </transformers>
                        </configuration>
                    </execution>
                </executions>
            </plugin>    

        </plugins>
 </build>

 <dependencies>

        <dependency>
            <groupId>com.microsoft.sqlserver</groupId>
            <artifactId>mssql-jdbc</artifactId>
            <version>6.2.2.jre7</version>
        </dependency>                 

 </dependencies>

</project>

【问题讨论】:

哦,如果我从 .jar meta-inf 中删除 *.RSA 文件,那么它可以工作......但我认为它不是一个真正的解决方案...... 这就是解决方案。 jar 中的文件已签名,并且通过阴影,签名变得无效。你真的应该考虑是否应该遮阴。 相关,可能重复:***.com/questions/25779708/… 和 ***.com/questions/34738653/… 我明白了,谢谢。它是一个签名的罐子。我真的需要做一个胖罐子。而且我必须使用 mssql。我可以使用任何其他的 fat-jar-maker 或其他 msSql 驱动程序吗? 您应该能够配置 maven shade 以在着色时跳过签名文件,这应该可以解决您的问题。 【参考方案1】:
<configuration>                                                                 
                            <filters>

                            <filter>
                                    <artifact>*:*</artifact>
                                    <excludes>
                                        <exclude>META-INF/*.SF</exclude>
                                        <exclude>META-INF/*.DSA</exclude>
                                        <exclude>META-INF/*.RSA</exclude>
                                    </excludes>
                                </filter>

                        </filters>                            
</configuration>

【讨论】:

以上是关于Maven Shade 插件 + MsSQL JDBC -> 即时 JNI 错误 - 无效的签名文件清单的主要内容,如果未能解决你的问题,请参考以下文章

maven插件: shade, assembly

maven shade插件小记

Maven shade插件打包DLL

maven-shade-plugin插件未生效原因分析

带有 Maven Shade 插件的 Spring Boot - 未映射控制器(404 错误)

idea打包jar的多种方式,用IDEA自带的打包形式,用IDEA自带的打包形式 用Maven插件maven-shade-plugin打包,用Maven插件maven-assembly-plugin打