因此,一个有效的解决方案是使用 maven-assembly-plugin 而不是 maven-shade-plugin 。程序集插件创建一个包含所有依赖项的独立jar,而无需重新打包所有依赖项。
maven-assembly-plugin
maven-shade-plugin
当然,我不得不删除 <scope>provided</scope> 对于mapdb,它也包含在组装的jar中。
<scope>provided</scope>
剩下的就是用以下片段替换树荫插件(多亏了这个 这里有问题 ):
<plugin> <artifactId>maven-assembly-plugin</artifactId> <executions> <execution> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> </configuration> </plugin>
之后我收到另一个例外,我认为是由于错误的签名:
Caused by: java.lang.VerifyError ...
事实证明这只是因为我在neo4j中有另一个使用与mapdb相同依赖的过程。快速修复是删除该过程库。
当然,还有其他解决方案,包括删除签名或重新签名。但是,我明确地不想删除任何签名。