【问题标题】:Access Spring Boot Application JAR in Standandalone Java Application在独立 Java 应用程序中访问 Spring Boot 应用程序 JAR
【发布时间】:2021-05-24 18:40:33
【问题描述】:

我有一个带有 REST 控制器类的 Spring Boot 应用程序,该类具有两个 REST 端点

我想将它打包到一个 JAR 中,并作为独立 java 类中的普通方法调用访问 REST 端点方法

我已经在我的项目构建浴中添加了 JAR,如下所示:

尽管在类路径中添加了 JAR,但我无法在我的独立项目中为 Rest Controller 类创建对象

例如:我有一个名为 TestController 的类和一个名为 testMethod() 的方法,该方法映射到 (/test) 路径。

我不想将其作为 HTTP 端点调用,而是为控制器类和访问方法创建对象,如下所示:

public static void main(String[] args) {

    TestController test = new TestController();
    test.testMethod();
}

提前谢谢你!

【问题讨论】:

  • spring boot 创建的 uber-jar 不打算用作依赖项。因为它在 lib 目录中包含自定义类加载器和依赖 jar。标准的 java 类加载器不能从那里加载类。您的选择是将其余控制器(或您想要重用的所有类)提取到 maven 模块中,并将生成的 jar 用作您的 spring boot 应用程序和您无法围绕它创建的其他应用程序的依赖项。另一种方法是公开 REST 控制器使用的服务并减少“RESTy”依赖。

标签: java spring-boot maven jar executable-jar


【解决方案1】:

您可以配置 spring-boot-maven-plugin 来构建两个工件:一个是普通的“库”jar,仅包含项目的类,另一个是胖的可执行 jar。见spring-boot-maven-plugin documentation

使用默认的 spring-boot-project,以 spring-boot-starter-parent 作为父级,下面的配置将生成一个普通的<artifactId>-<version>.jar 和一个胖的<artifactId>-<version>-exec.jar

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <executions>
        <execution>
            <id>repackage</id>
            <configuration>
                <classifier>exec</classifier>
            </configuration>
        </execution>
    </executions>
</plugin>

如果没有 spring-boot-starter-parent,它需要稍微不同的配置 - 请参阅参考文档。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-19
    • 1970-01-01
    • 1970-01-01
    • 2018-09-24
    相关资源
    最近更新 更多