我想从另一个jar中读取变量值
Main.jar
public static int version = 2;
我已经添加了库导航到Main.jar(lib / Main.jar)
然后我从Loader.jar
执行此操作int version = dummy.Main.version;
如果有更新
,请更换新的Loader.jar
URL url = new URL("http://127.0.0.1/cn/Main.jar");
try (InputStream in = url.openStream()) {
Files.copy(in, Paths.get("lib/Main.jar"), StandardCopyOption.REPLACE_EXISTING);
}
catch (HeadlessException | IOException | NumberFormatException e) {
//do exception
}
}
但问题是我无法替换文件,因为正在使用该文件,因为Main.jar由Loader.jar使用
如何替换正在使用的文件?
答案 0 :(得分:0)
你有一些选择
javap
以转储静态字段的代码并从文本中提取值。我怀疑最后一个选项最容易编码。
答案 1 :(得分:0)
请勿替换JAR文件,因为您无法安全地强制其他进程不使用它。
而是在其旁边安装较新的JAR文件,其中版本号嵌入在JAR文件名中,并重写JAR文件的其他用户以定期扫描较新的JAR文件。找到一个时,他们应该丢弃加载旧JAR文件的类加载器,并重新加载新的集合。
或者,决定不将此信息嵌入JAR文件中。资源文件比JAR文件更容易阅读和处理,它们是纯文本文件。