关于bnd Launcher配置文件支持及bndtools导出jar时配置添加的问询
嘿,针对你的两个问题,我来给你详细梳理下解决方案:
问题1:bnd Launcher是否支持通过系统属性指定配置文件?
当然支持!bnd Launcher完全兼容JVM的系统属性传递,你有两种常见的方式来指定:
- 启动时直接传系统属性:在命令行启动应用时,直接用
-D参数指定,比如:java -Djava.util.logging.config.file=jul-debug.properties -jar your-launch.jar - 在bndrun文件中预配置:就像你之前在bndtools里做的那样,在
launch.bndrun中添加-runproperties指令,把系统属性提前配置好:
这样无论是在bndtools中启动,还是导出jar后启动,这个配置都会生效(前提是配置文件能被正确找到)。-runproperties: java.util.logging.config.file=jul-debug.properties
问题2:如何将jul-debug.properties纳入导出的launch.jar中?
bnd默认不会自动把工作目录下的零散文件打包到导出的jar里,不过你可以通过bnd的指令轻松实现这个需求,同时还要调整日志的读取方式——因为jar内的文件不能直接用普通文件路径访问:
第一步:把配置文件打包到jar中
在你的launch.bndrun文件里添加-includeresource指令,指定要包含的文件:
- 如果想把文件放到jar的根目录:
-includeresource: jul-debug.properties - 如果想放到特定子目录(比如
config/):
这里等号左边是文件在jar里的路径,右边是本地工作目录中的文件路径。-includeresource: config/jul-debug.properties=jul-debug.properties
第二步:让JUL读取jar内的配置文件
因为JUL的java.util.logging.config.file属性只支持本地文件系统路径,无法直接读取jar内的文件,所以需要换一种方式加载:
方式一:自定义日志配置类
创建一个简单的配置类,通过类路径加载jar内的配置文件:
import java.io.IOException; import java.io.InputStream; import java.util.logging.LogManager; public class LoggingInitializer { static { try (InputStream configStream = LoggingInitializer.class.getResourceAsStream("/jul-debug.properties")) { if (configStream != null) { LogManager.getLogManager().readConfiguration(configStream); } else { System.err.println("Failed to find jul-debug.properties in classpath"); } } catch (IOException e) { e.printStackTrace(); } } }
然后在launch.bndrun的-runproperties里指定这个类:
-runproperties: java.util.logging.config.class=com.yourpackage.LoggingInitializer
这样JVM启动时会加载这个类,静态代码块会自动读取jar内的配置文件。
方式二:在应用入口手动加载
如果你的应用有自定义的入口类,可以在启动逻辑最开始添加日志初始化代码:
public class Main { public static void main(String[] args) { // 先初始化日志 try (InputStream configStream = Main.class.getResourceAsStream("/jul-debug.properties")) { if (configStream != null) { LogManager.getLogManager().readConfiguration(configStream); } } catch (IOException e) { e.printStackTrace(); } // 启动应用逻辑 // ... } }
这种方式不需要额外的配置类,更灵活。
内容的提问来源于stack exchange,提问作者Michael Lipp
相关产品推荐
相关产品推荐

