gpt4 book ai didi

java - 从外部值定义编译时常量

转载 作者:行者123 更新时间:2023-12-01 11:58:05 25 4
gpt4 key购买 nike

我想在编译时分配的每个 jar 文件的主类中定义一个版本号,就像在 C 中使用 #include 语句和外部文件中的值可以轻松完成的那样。我只想在该外部位置设置一个值一次,因此在我更改它之前编译/构建的任何 jar 文件都会获得相同的值。

我的第一个想法是在一个公共(public)类中定义它,然后像这样简单地引用它:

我创建一个 Base.java 文件:

class Base
{
public final static String version = "1.2.3";
}

然后我编译 Base.java 并将其打包。

然后我创建一个 Module1.java 文件:

class Module1
{
public final static String version = Base.version;

public static void main( String[] args )
{
Module1();
}

Module1()
{
System.out.println( "Module1: "+this.version );
}
}

但是,当然,如果不导入 Base 类,这将无法编译,因此我将其插入到 Module1 类之前:

import Base;

我编译 Module1.java 并将其打包并执行;正如预期的那样,它返回:

Module1: 1.2.3

到目前为止一切顺利。但随后我编辑 Base.java 文件并将版本值更改为不同的值,例如“1.3.0”,然后编译 Base.java 并将其打包。

现在我想创建一个 Module2.java 文件:

import Base;
class Module2
{
public final static String version = Base.version;

public static void main( String[] args )
{
Module2();
}

Module2()
{
System.out.println( "Module2: "+this.version );
}
}

我编译并 jar 了 Module2,并执行它,它正确返回:

Module2: 1.3.0

也不错。但作为健全性检查,我希望(想要/希望)Module1 返回与以前相同的结果,所以我重新运行 Module1,但是是假的!它返回:

Module1: 1.3.0

关于如何实现这一目标有什么建议吗?那么模块中的版本保持编译时的状态,而不是在运行时的每个 session 期间设置?

最佳答案

在 Java 中,存储 .jar 文件版本的标准位置是 list 文件 (META-INF/MANIFEST.MF),而不是类文件。具体来说,将这一行放在那里:

Implementation-Version: 1.2.3

参见here了解更多详情。

要从代码中访问此信息,请使用 java.util.jar.Manifest类,特别是 getMainAttributes() 方法。

关于java - 从外部值定义编译时常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28272597/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com