jar 顶层内的多个入口点(main 类)
Multiple entry points (main classes) inside jar's top level
值得一提的是,我正在使用 maven 作为我的构建管理工具。我有一个 jar(我们称之为 dep.jar
),它将作为依赖项包含在最终项目(final.jar
)中。
dep.jar
有一个 class with main 方法。
我需要在我的 final.jar
的顶级目录中有几个入口点(classes 和主要方法),这样我就可以根据需要使用入口点。包括 dep.jar
.
中的一个
我考虑过:
- 正在更改 jar 中的
META-INF/MANIFEST.MF
文件。正如 Oracle 所述,不可能在 jar 的依赖项(BOOT-INF/lib
目录)-> https://docs.oracle.com/javase/tutorial/deployment/jar/downman.html; 中引用 main classes
- Uber jar - 不是一个选项,我依赖于 Java 代码库中的 jar 目录结构
- 使用像这样的特殊 class 加载器 http://www.jdotsoft.com/JarClassLoader.php。但它意味着改变
final.jar
的主要方法,由于项目限制我不能这样做。
- 使用
maven-dependency-plugin
但它可以解压内部 jar (dep.jar
) 并将 classes 复制到 maven 工作目录 target
,在打包阶段将打包到 BOOT-INF/classes
目录。同样,我无法从那里引用 main classes。如果我将它们解压缩并复制到不同于 target
的地方 - 复制的 classes 将不会出现在我的 final.jar
中
是否有任何其他插件或选项如何在 JAR 构建期间从 final.jar
依赖 jar dep.jar
添加 class 到 final.jar
的顶层?
编辑:
final.jar
项目如下所示:
final.jar
|_______BOOT-INF
|_______lib
| |_______dep.jar (contains main class I want to invoke)
|_______classes
|__________dir (directory I want to copy on demand with help of CLI)
我在这里找到了解决方案 。启动 jar 时最终使用 -Dloader.main
属性。
命令行如下所示:java -jar -Dloader.main=<main_class> ./final.jar
值得一提的是,我正在使用 maven 作为我的构建管理工具。我有一个 jar(我们称之为 dep.jar
),它将作为依赖项包含在最终项目(final.jar
)中。
dep.jar
有一个 class with main 方法。
我需要在我的 final.jar
的顶级目录中有几个入口点(classes 和主要方法),这样我就可以根据需要使用入口点。包括 dep.jar
.
我考虑过:
- 正在更改 jar 中的
META-INF/MANIFEST.MF
文件。正如 Oracle 所述,不可能在 jar 的依赖项(BOOT-INF/lib
目录)-> https://docs.oracle.com/javase/tutorial/deployment/jar/downman.html; 中引用 main classes
- Uber jar - 不是一个选项,我依赖于 Java 代码库中的 jar 目录结构
- 使用像这样的特殊 class 加载器 http://www.jdotsoft.com/JarClassLoader.php。但它意味着改变
final.jar
的主要方法,由于项目限制我不能这样做。 - 使用
maven-dependency-plugin
但它可以解压内部 jar (dep.jar
) 并将 classes 复制到 maven 工作目录target
,在打包阶段将打包到BOOT-INF/classes
目录。同样,我无法从那里引用 main classes。如果我将它们解压缩并复制到不同于target
的地方 - 复制的 classes 将不会出现在我的final.jar
中
是否有任何其他插件或选项如何在 JAR 构建期间从 final.jar
依赖 jar dep.jar
添加 class 到 final.jar
的顶层?
编辑:
final.jar
项目如下所示:
final.jar
|_______BOOT-INF
|_______lib
| |_______dep.jar (contains main class I want to invoke)
|_______classes
|__________dir (directory I want to copy on demand with help of CLI)
我在这里找到了解决方案 -Dloader.main
属性。
命令行如下所示:java -jar -Dloader.main=<main_class> ./final.jar