java - 为什么我的多 jar 应用程序似乎没有注意到包含一类唯一字段的 JAR 中的更改?

标签 java jar jvm

我有一个应用程序有一个可执行 JAR,它使用其他 JAR 的库。当我更新库 JAR 时,用户关闭他们的程序并再次打开它,然后使用新的 JARS。但是,我有一个只包含一个类的 JAR,它只包含字段。当这个 JAR 被自己替换时,旧 JAR 中字段中的值似乎在程序中使用。

此时旧的 JAR 已从文件系统中消失,所以我对这些值的来源感到有些困惑。我当前的解决方案是更新另一个使用有问题的 JAR 的 JAR,但我不确定为什么会这样,所以我正在寻找任何可能可用的见解。

最佳答案

Java 代码中的常量可以被编译器内联。示例:

public class A {
    public static final String STR = "foo";
}

public class B {
    public static void main(final String... args) {
        System.out.println(A.STR);
    }
}

如果将STR改为“bar”,重新编译A,B在运行时仍会打印“foo”。解决方案是重新编译和更新使用常量的代码。

另见 Are all compile-time constants inlined?

关于java - 为什么我的多 jar 应用程序似乎没有注意到包含一类唯一字段的 JAR 中的更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15033067/

相关文章:

java.lang.NoSuchMethodError : javax. ws.rs.core.MultivaluedMap.addAll(Ljava/lang/Object;[Ljava/lang/Object;)V

java - 如何在启动时运行 jar 文件(Ubuntu 11.10)?

java - 探索 Java 中的线程

java - 关于分段代码缓存的小问题 (http ://openjdk. java.net/jeps/197)

Java 400 错误但在浏览器中打开

java - 如何读取文本文件并返回包含数据的网格对象

java - 如何在 Windows 上使用命令行执行具有外部依赖项的 jar 文件?

java - 如何在选项卡布局中的 RelativeLayout 上显示 Fab

Java复制文件扭曲文件

java - 安装 jdk 8 后 JVM 的时区不正确