JPMS和FATUBER可执行JAR--它是如何协同工作的?

JPMS and fatuber executable JAR - how it works together?(JPMS和FATUBER可执行JAR--它是如何协同工作的?)

本文介绍了JPMS和FATUBER可执行JAR--它是如何协同工作的?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想知道当使用JDK>8(即实际上使用JPMS)以及可执行JAR时,FATUBER JAR是如何工作的。

我有两个与此主题相关的问题:

1.FATUBER JAR创建组装流程

每个Java模块通常是一个JAR,它在根条目中保存module-info.class。 我正在使用Maven,我正在使用Maven汇编插件来构建FATUBER JAR(带有依赖关系的JAR引用描述符)。 如果我的应用程序依赖于许多模块化JAR,那么所有这些JAR将如何共存?毕竟,每个JAR的module-info.class都将覆盖另一个JAR的module-info.class文件,因为所有的module-info.class都应该在根条目中...?

(侧标:我已经用我创建的maven sample project对它进行了测试,并发现最终的FAT JAR只保存第一个遇到的依赖项的module-info.class。使用-X选项还发现,由于第一个文件的存在,所有其他module-info.class文件都被跳过...)

2.可执行JAR

众所周知,可执行JAR可以通过java -jar <jar-file-name.jar>运行。当以这种形式使用JDK 11时-我的(FAT)JAR及其所有依赖项是否会从类路径运行,并由此被视为未知模块的一部分?还是从模块路径?

推荐答案

您可以从FAT JAR中删除MODULES-INFO.CLASS,以去除模块化元数据。这是一个简单的解决方案,现在您的FAT JAR将是可执行的。

zip -d FatJar.jar module-info.class

这篇关于JPMS和FATUBER可执行JAR--它是如何协同工作的?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本文标题为:JPMS和FATUBER可执行JAR--它是如何协同工作的?