【问题标题】:Multiple entry points (main classes) inside jar's top leveljar 顶层内的多个入口点(主类)
【发布时间】:2020-07-15 20:16:42
【问题描述】:

值得一提的是,我使用 maven 作为构建管理工具。我有一个 jar(我们称之为 dep.jar),它将作为依赖项包含在最终项目(final.jar)中。 dep.jar 有一个带有 main 方法的类。 我需要在我的final.jar 的顶级目录中有几个入口点(带有主要方法的类),以便我可以根据需要使用入口点。包括来自dep.jar的一位。

我考虑过:

  1. 在 jar 中更改 META-INF/MANIFEST.MF 文件。正如 Oracle 所说,无法引用 jar 依赖项中的主类(BOOT-INF/lib 目录)-> https://docs.oracle.com/javase/tutorial/deployment/jar/downman.html;
  2. Uber jar - 不是一个选项,我依赖于 Java 代码库中的 jar 目录结构
  3. 使用像 http://www.jdotsoft.com/JarClassLoader.php 这样的特殊类加载器。但这意味着更改final.jar 的主要方法,由于项目限制,我不能这样做。
  4. 使用maven-dependency-plugin,但它可以解压内部jar(dep.jar)并将类复制到maven工作目录target,在打包阶段将打包到BOOT-INF/classes目录。同样,我不能从那里引用主要类。如果我解压缩并将它们复制到不同于target 的位置 - 复制的类将不会出现在我的final.jar

是否有任何其他插件或选项如何在 JAR 构建期间将类从 final.jar 依赖 jar dep.jar 添加到 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)

【问题讨论】:

  • 你说的是spring boot应用吗?
  • 是和不是。我有两个入口点 - 一个启动 spring 应用程序,另一个(dep.jar 的)不是。所以我不能为此使用弹簧插件如果这就是你的要求。
  • 这里重要的是,您的第一个citizen 应用程序是一个spring boot 应用程序,这意味着依赖项位于BOOT-INF/lib,这意味着您无法以任何通常的方式访问它们。你可以做的是在spring boot中创建一个单独的入口点(一个额外的extrypoint)dzone.com/articles/configuring-a-main-class-in-spring-boot但是结合第二个入口点,你可以从类加载模糊开始......问题是:你为什么需要那个?
  • 我需要创建一个 CLI 来处理在 spring 应用程序构建期间创建的文件。我需要为此使用final.jar,以便我可以访问这些文件。但我不想初始化 spring 上下文,因为它太重了。所以我想在没有春天的情况下有第二个入口点。我可以顺便使用maven-dependency-plugin 访问BOOT-INF/lib 中的依赖项。但我不知道如何将它们放在final.jar 的顶层。
  • 现在我完全糊涂了。您在构建期间生成文件,但需要通过运行时使用它们,而不是用于 Spring Boot 应用程序。为什么不将它们打包为资源并使用它们。我在链接中给了你第二个没有弹簧的入口点。你能解释一下这些文件的用途吗?从我的角度来看听起来很奇怪?...

标签: java maven build jar compilation


【解决方案1】:

我在这里找到了解决方案Spring Boot - How to specify an alternate start-class? (Multiple Entry Points)。启动 jar 时最终使用 -Dloader.main 属性。 命令行如下所示:java -jar -Dloader.main=<main_class> ./final.jar

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-23
    • 2019-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-15
    相关资源
    最近更新 更多