使用Shade-Plugin正确地最小化Uber Jar

我正在使用Maven-Shade-Plugin创建一个可运行的Uber-jar。 根据此页面的最后一帧,可以通过使用以下方式最小化jar的大小:

 true  

但是此function未考虑log4j.properties文件中声明的类。 因此,例如org.apache.log4j.appender.TimeAndSizeRollingAppender不包含在Uber-jar中,即使它已在log4j.properties文件中声明。

我相信我会遇到与Spring相同的问题。 如果我的代码只引用接口A而我的Spring文件包含实现A的B类实例化,那么B可能不会被添加到jar中,因为它不在代码中。

我怎么解决这个问题?

此function已添加到maven-shade-plugin的1.6版本(刚刚发布)。 minimizeJar现在不会删除filter中特别包含的类。 请注意,在filter中包含一些工件的类将排除该工件的非指定类,因此请确保包含所需的所有类。

这是一个示例插件配置:

  org.apache.maven.plugins maven-shade-plugin 1.6   package  shade   true   log4j:log4j  **    commons-logging:commons-logging  **        

要包含特定类,请使用filter中类名中的路径斜杠将它们添加为包含(同样,将自动排除未包含的类)。

  org.yourorg:your-artifact  org/yourorg/yourartifact/api/* org/yourorg/yourartifact/util/*