首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Maven Shade不拆包

Maven Shade不拆包
EN

Stack Overflow用户
提问于 2022-09-04 10:27:24
回答 1查看 80关注 0票数 2

我从一开始就告诉你

我正在努力学习picocli,因此通过maven创建了一个项目,添加了依赖项,编写了一些代码,现在我想看到它的输出--我想我有两种方法(我认为)使用maven exec插件或创建一个可执行的jar (uber ),并在java -jar中运行它(自从我将.jar添加到windows PATHEXTASSOCFTYPE之后,我可以不用java -jar运行)

第二个更令我愉快,所以我尝试通过maven阴影插件创建一个uber jar。

通过mvn clean package从命令行获得的日志信息和最后一个uber的内容给我带来了以下问题:

为什么遮阳插件打开每个罐子到最后的uber?这在META-INF/MANIFEST.MFmodule-info.class中造成了一些重叠(即使它没有产生任何bug,但不缺少任何东西不是更好吗?)

最好是拥有所有jar文件+特定于项目的jar,而不必在最终的uber jar根目录中解压,再加上指向主类的META-INF/MANIFEST.MF吗?不是更干净吗?,就像下面这样

当然,这背后有一个原因(包装提取罐)?包装未提取的罐子(如上面的图片)的利弊是什么?

最后,是否有任何可以随时使用的插件来打包uber jar而不解压缩依赖项(我知道是否可以通过配置组装插件)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-04 11:32:00

使用uber JAR的最大好处是您不需要任何自定义的类加载器。JAR文件中的结构与任何其他JAR文件的结构一样。最大的缺点是你已经找到了一个--如果多个JAR文件提供相同的文件,您需要处理这个问题。默认情况是选择一个(首先?最后?),所有其他的都被丢弃了。您可以将插件配置为合并它们,但是对于某些文件,这将更加困难。

还有其他的选择。

  • 在过去,我使用过内贾尔,但它已经超过10年没有更新了。我发现了一个分叉,但它的最后一次承诺是在2015年。
  • 如果创建Spring应用程序,默认情况是创建不同类型的JAR文件。
  • Quarkus也有类似的选项(也可以使用uber JAR)。

这些替代方案将JAR文件捆绑在JAR文件中。它可以通过添加一些执行自定义类加载的自定义类来做到这一点。虽然可以使用它创建应用程序,但不能将这些JAR文件用作其他项目中的库。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73598620

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档