从另一个jar

时间:2018-03-17 12:13:56

标签: java

我想从另一个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使用

如何替换正在使用的文件?

2 个答案:

答案 0 :(得分:0)

你有一些选择

  • 使用它关闭程序,重启后重试。
  • 每次创建一个新的JAR文件,并每次在不同的类加载器中加载它。
  • 使用字节码阅读器(如ASM)读取JAR中类的内容。
  • 而不是将版本存储在代码中,将其存储在文件中(或者也可以)。您可以轻松地从JAR读取文件,而无需将其放在类路径上。
  • 运行javap以转储静态字段的代码并从文本中提取值。

我怀疑最后一个选项最容易编码。

答案 1 :(得分:0)

请勿替换JAR文件,因为您无法安全地强制其他进程不使用它。

而是在其旁边安装较新的JAR文件,其中版本号嵌入在JAR文件名中,并重写JAR文件的其他用户以定期扫描较新的JAR文件。找到一个时,他们应该丢弃加载旧JAR文件的类加载器,并重新加载新的集合。

或者,决定不将此信息嵌入JAR文件中。资源文件比JAR文件更容易阅读和处理,它们是纯文本文件。