运行可执行 jar 时未检测到 YML 文件

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

项目:运行 moudlar jar 文件时 Javafx + Spring 启动错误

问题:未检测到 YML 文件(当前使用)或属性文件,在 Intellij 社区 IDE 中运行时工作正常

YML文件在jar中,解压jar文件后仍然没有被检测到。

(在项目中使用Module-info.java)

Java 21:Amazon JDK 相关

JavaFX:21

弹簧靴:3


控制台错误:

使用 spring-jcl 进行标准共享日志记录发现:请从类路径中删除 commons-logging.jar 以避免潜在的冲突

:: Spring Boot :: (v3.2.0)

14:00:32.070 [JavaFX-Launcher] INFO org.springframework.boot.SpringApplication -- 使用 PID 10608 的 Java 21.0.2 启动应用程序(由某个/文件夹中的人启动) 14:00:32.076 [JavaFX-Launcher] INFO org.springframework.boot.SpringApplication -- 没有活动配置文件集,回退到 1 个默认配置文件:“default”


有效的解决方案: 当使用 artifcat 制作 jar 时工作“复制到输出目录并通过清单链接”

提取到traget jar 时不起作用

about 解决方案有效,但将每个依赖项提取到文件夹中,并且它的大小很大。

需要: 当可执行 jar 文件执行而没有任何 yml 未检测到问题时,如何使其工作。

java spring-boot javafx build jar
1个回答
0
投票

SpringBoot 有多种方法来查找属性。检查它如何找到属性并尝试使用它来帮助调试您的问题。

通常,可配置的应用程序资源将位于文件系统上,而不是位于 jar 文件中(Spring 术语“外部化配置”),除非它们是默认资源。有关 Spring 在何处查找属性文件的信息,请参阅第 23.3 应用程序属性文件。您可能希望您的应用程序安装在其中一个位置有一个可编辑的配置文件,以便用户可以配置您的应用程序。


建议:模块化、SpringBoot JavaFX 应用程序、打包和构建工具

此建议并不直接回答您的问题,但某些主题是间接相关的。

Spring 第 6 版(或 SpringBoot 3)的构建不能很好地与 Java 模块配合使用(IMO)。它依赖于“自动模块机制”,但它有很多缺点。例如,此类应用程序无法使用 jlink

 进行链接。
我建议使用非模块化设置(例如删除您的

module-info.java

)。有关开发非模块化 JavaFX 应用程序的信息位于

openjfx.io 入门
要打包 JavaFX 应用程序以进行部署,您需要构建适当的运行时映像。我建议使用构建工具(gradle 或 maven)进行打包,可能会通过插件、脚本和命令行工具(如

jlink

jpackage
)进行增强。
不支持将 JavaFX 应用程序打包为包含 JavaFX 模块的单个 jar 文件。它破坏了 JavaFX 或模块化应用程序假定存在的 Java 模块化性。虽然

它可以在某些情况下工作

。对于可以在多个平台上运行的跨平台应用程序执行此操作可能会导致生成非常大的 jar 文件,尤其是在使用 javafx-web 组件的情况下,因为它需要包含所有 JavaFX 运行时组件(java 二进制文件和本机代码)可能的平台。 不幸的是,打包 JavaFX 应用程序是一个复杂且有时困难的主题。信息位于 StackOverflow JavaFX 标签的 Packaging 部分

,以及 openjfx 入门文档

Runtime Images 部分。

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