我从一开始就告诉你
我正在努力学习picocli,因此通过maven创建了一个项目,添加了依赖项,编写了一些代码,现在我想看到它的输出--我想我有两种方法(我认为)使用maven exec插件或创建一个可执行的jar (uber ),并在java -jar中运行它(自从我将.jar添加到windows PATHEXT、ASSOC和FTYPE之后,我可以不用java -jar运行)
第二个更令我愉快,所以我尝试通过maven阴影插件创建一个uber jar。
通过mvn clean package从命令行获得的日志信息和最后一个uber的内容给我带来了以下问题:
为什么遮阳插件打开每个罐子到最后的uber?这在META-INF/MANIFEST.MF和module-info.class中造成了一些重叠(即使它没有产生任何bug,但不缺少任何东西不是更好吗?)
最好是拥有所有jar文件+特定于项目的jar,而不必在最终的uber jar根目录中解压,再加上指向主类的META-INF/MANIFEST.MF吗?不是更干净吗?,就像下面这样

当然,这背后有一个原因(包装提取罐)?包装未提取的罐子(如上面的图片)的利弊是什么?
最后,是否有任何可以随时使用的插件来打包uber jar而不解压缩依赖项(我知道是否可以通过配置组装插件)
发布于 2022-09-04 11:32:00
使用uber JAR的最大好处是您不需要任何自定义的类加载器。JAR文件中的结构与任何其他JAR文件的结构一样。最大的缺点是你已经找到了一个--如果多个JAR文件提供相同的文件,您需要处理这个问题。默认情况是选择一个(首先?最后?),所有其他的都被丢弃了。您可以将插件配置为合并它们,但是对于某些文件,这将更加困难。
还有其他的选择。
这些替代方案将JAR文件捆绑在JAR文件中。它可以通过添加一些执行自定义类加载的自定义类来做到这一点。虽然可以使用它创建应用程序,但不能将这些JAR文件用作其他项目中的库。
https://stackoverflow.com/questions/73598620
复制相似问题