阴影插件将所有依赖项与开发的代码结合在一起,并在一个Uber
JAR中对其进行加密。缺点是它可以覆盖资源文件,并且不能与签名的jar一起很好地使用(至少以我的经验)。
如果可能的话,我建议远离阴影插件。
就是说,如果您必须使用它-您可能会遇到合并jar资源的问题。您可以使用许多变压器来解决此问题,并且您需要研究确实需要哪一个。我将从这样的事情开始
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>2.4.3</version> <configuration> <shadedArtifactAttached>true</shadedArtifactAttached> <shadedClassifierName>${executable.classifier}</shadedClassifierName> <filters> <filter> <artifact>*:*</artifact> <excludes> <exclude>meta-INF/*.SF</exclude> <exclude>meta-INF/*.DSA</exclude> <exclude>meta-INF/*.RSA</exclude> </excludes> </filter> </filters> </configuration> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" /> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass>fully.qualified.ClassName</mainClass> </transformer> </transformers> </configuration> </execution> </executions></plugin>你可以找到关于Apache更发电产品的插件这里
我建议的替代方法是Spring Boot,它使用Jar-in-Jar结构和自定义ClassLoader来从内部jar中加载类。
由于不必像Shade插件方法那样重写文件,因此这是一种更简单的方法,它可以更好地处理依赖项。
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>1.3.6.RELEASE</version> <configuration> <classifier>${executable.classifier}</classifier> <layout>ZIP</layout> <mainClass>fully.qualified.ClassName</mainClass> </configuration> <executions> <execution> <phase>package</phase> <goals> <goal>repackage</goal> </goals> </execution> </executions></plugin>认真地看一下简单的配置!
注意:大部分内容来自我自己的注释-版本号可能有点旧…



