spring boot jar 和 io.quarkus.runner.ApplicationImpl

问题描述 投票:0回答:1

io.quarkus.runner.ApplicationImpl 在哪里/何时/如何生成?

我已将 Quarkus 应用程序包装到 Spring Boot jar 中,因为 Quarkus 的 uber-jar 打包存在 META-INF/services 冲突。 (Spring 的类加载器方法在概念上更加清晰。)

有趣的是,如果该 jar 在 Windows 上启动,它就可以正常工作。如果在Linux系统上启动,则会失败并出现异常。

Exception in thread "main" java.lang.reflect.InvocationTargetException
        at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:118)
        at java.base/java.lang.reflect.Method.invoke(Method.java:580)
        at org.springframework.boot.loader.launch.Launcher.launch(Launcher.java:91)
        at org.springframework.boot.loader.launch.Launcher.launch(Launcher.java:53)
        at org.springframework.boot.loader.launch.PropertiesLauncher.main(PropertiesLauncher.java:574)
Caused by: java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
        at io.quarkus.launcher.QuarkusLauncher.launch(QuarkusLauncher.java:58)
        at io.quarkus.runtime.Quarkus.launchFromIDE(Quarkus.java:101)
        at io.quarkus.runtime.Quarkus.run(Quarkus.java:88)
        at io.quarkus.runtime.Quarkus.run(Quarkus.java:44)
        at org.tbee.spotifyDanceInfoQrks.SpotifyDanceInfoQrks.main(SpotifyDanceInfoQrks.java:14)
        at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
        ... 4 more
Caused by: java.lang.reflect.InvocationTargetException
        at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:118)
        at java.base/java.lang.reflect.Method.invoke(Method.java:580)
        at io.quarkus.launcher.QuarkusLauncher.launch(QuarkusLauncher.java:56)
        ... 9 more
Caused by: java.lang.UnsupportedOperationException: Unable to resolve nested path
        at org.springframework.boot.loader.nio.file.NestedPath.resolve(NestedPath.java:130)
        at java.base/java.nio.file.Path.resolve(Path.java:516)
        at io.quarkus.bootstrap.utils.BuildToolHelper$BuildTool.exists(BuildToolHelper.java:44)
        at io.quarkus.bootstrap.utils.BuildToolHelper.getProjectDir(BuildToolHelper.java:59)
        at io.quarkus.bootstrap.IDELauncherImpl.launch(IDELauncherImpl.java:37)
        at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
        ... 11 more

经过检查,发现 Quarkus 在每个系统上遵循不同的引导路径,这是因为在 Windows 上它找到了 io.quarkus.runner.ApplicationImpl 而在 Linux 上却找不到。结果Quarkus.run在Windows上进入正常启动,在Linux上进入launchFromIDE。 launchFromIDE 尝试确定它是否从 Maven 启动,尝试查找某个构建目录,但因找不到路径而失败。

io.quarkus.runner.ApplicationImpl 在源代码中被描述为生成的类。在哪里、为什么、何时、如何生成?

quarkus
1个回答
0
投票

首先,您不能在 Spring Boot 中包含 Quarkus 应用程序,因为 Quarkus 不是一个库,而是一个完全控制应用程序生命周期的框架(与 Spring Boot 的方式类似)。

至于

io.quarkus.runner.ApplicationImpl
,它是在构建应用程序时在构建时生成的,但这个细节不是用户必须知道或交互的。

© www.soinside.com 2019 - 2024. All rights reserved.