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 插件的 Spring Boot - 未映射控制器(404 错误)
idea打包jar的多种方式,用IDEA自带的打包形式,用IDEA自带的打包形式 用Maven插件maven-shade-plugin打包,用Maven插件maven-assembly-plugin打