Java:如何构建基于Maven的项目的独立发行版?

我经常遇到Java应用程序或库的发行版
使用Maven作为他们的构建工具.

遗憾的是,其中一些不提供独立(或可再分发)的罐子.

是否有可能以这种方式构建基于Maven的应用程序
构建结果包含所有依赖项,可以重新分配到开箱即用的工作?

我试着建立Jackrabbit的OCM模块.
出于一些非常“智能”的原因,没有可下载的独立版本
版.
所以我用Maven构建了Jackrabbit(Jackrabbit的源包包括
OCM),得到了与apache repository相同的罐子.
jar不包含必要的依赖项,对我来说没用.

最佳答案
使用Maven Shade插件

…但要注意陷阱(类似于我的答案中描述的那个),它已经得到了a workaround explained here.

另外,要小心使用Shade插件配置.我不小心使用了双<配置>标签一次,变形金刚根本不适用,插件也冒昧地不警告我.

不要使用Maven Assembly插件

assembly:single将按原样解压缩依赖JAR,这可能不是你想要的.例如.像META-INF / spring.schemas这样的东西会被评估的最后一个Spring依赖JAR覆盖,因此你找不到你的XSD(当然除了最后一个JAR中的那些).这就是为什么像Alfresco这样的系统制作了他们的AMP插件,它将lib内部的依赖关系捆绑在你正在构建的AMP中.然而,后者引发了依赖管理问题.

转载注明原文:Java:如何构建基于Maven的项目的独立发行版? - 代码日志