根据您的问题,我假设您有一个名为的文件
jasperreports_extension.properties,位于您项目的内部
src/main/resources。因为您
jasperreports对此有依赖性,所以碰巧
jasperreports_extension.properties在类路径的根上有一个调用的资源,因此在制作时,一个将覆盖另一个
jar-with-dependencies。
要解决此问题,您应该删除
maven-assembly-plugin和使用
maven-shade-plugin。这个插件提供了一个开箱即用的转换器,该转换器能够将两个属性文件合并在一起:通过合并,我的意思是该文件之一附加到另一个属性的末尾:
有些jar包含具有相同文件名的其他资源(例如属性文件)。为避免覆盖,您可以选择通过将它们的内容附加到一个文件中来合并它们。
在这种情况下,示例配置为:
<plugin> <artifactId>maven-shade-plugin</artifactId> <version>2.4.3</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> <resource>jasperreports_extension.properties</resource> </transformer> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass>com.test.sample.MainClass</mainClass> </transformer> </transformers> <createDependencyReducedPom>false</createDependencyReducedPom> </configuration> </execution> </executions></plugin>
这将产生最终的胖JAR,其中的内容
jasperreports_extension.properties将是您文件的内容,以及来自依赖项的文件。
另外,
MANIFEST由于我们向插件指定了哪个类是主类,因此它也将是正确的。
附带说明,当您制作胖JAR时,
maven-assembly-plugin仅提供基本支持。从他们的主页:
如果您的项目想要将工件打包在uber-jar中,则Assembly插件仅提供基本支持。要进行更多控制,请使用Maven Shade插件。



