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.

中的一个

我考虑过:

  1. 正在更改 jar 中的 META-INF/MANIFEST.MF 文件。正如 Oracle 所述,不可能在 jar 的依赖项(BOOT-INF/lib 目录)-> https://docs.oracle.com/javase/tutorial/deployment/jar/downman.html;
  2. 中引用 main classes
  3. Uber jar - 不是一个选项,我依赖于 Java 代码库中的 jar 目录结构
  4. 使用像这样的特殊 class 加载器 http://www.jdotsoft.com/JarClassLoader.php。但它意味着改变final.jar的主要方法,由于项目限制我不能这样做。
  5. 使用 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