我有一个 pom 文件,它构建了一个利用各种 Spring 模块的独立应用程序,特别是它使用了集成文件模块。最初我的 pom 文件使用了 Maven Assembly 插件,但它创建的 uber jar 无法正确运行。进一步的研究似乎表明,程序集插件中存在一个错误,该错误基本上扰乱了 uber jar 中的依赖关系。推荐的解决方法是 Shade 插件,它对我有用。
但是,程序集插件能够创建一个包含 uber jar 和其他资源(属性文件、脚本等)的 zip 文件。然后,您可以使用该 zip 来解压缩它并运行脚本,该脚本将调用您的 jar 并传入其他项目(例如)。 据我所知,阴影插件没有此附加功能。
我尝试使用配置文件将阴影和程序集插件结合起来,但我不知道如何让它使用阴影插件来构建 uber jar,然后使用程序集插件与其他东西一起构建 zip .
有人做过类似的事情吗?我只需要能够创建我的 uber jar,然后将 uber jar 与脚本、xml 和其他项目一起压缩。
有没有办法运行程序集插件而不将其绑定到阶段?如果有的话,我可以运行 package 并运行阴影插件,然后独立运行程序集插件?如果可能的话,这将解决我的问题。
这个答案有点晚了,但我和你有同样的场景(“打包阶段”:1.用阴影构建uber-jar,2.将其打包到程序集zip中),我所要做的就是改变顺序其中插件在
pom.xml
中指定。
如果在组装之前指定了阴影,则它会在同一阶段之前执行。
在多模块项目中使用单独的模块只是为了组装 zip 是一种常见的做法。还有 appassembler-maven-plugin 您可能会感兴趣(不过我自己从未使用过它)。
关于在没有阶段的情况下运行插件:这总是可能的。执行目标页面上指定的全名。在这种情况下
org.apache.maven.plugins:maven-assembly-plugin:2.4:single
,或者简而言之 assembly:single
。
不要尝试用配置文件来解决这个问题,它们不是为此而设计的。