我想在编译时分配的每个 jar 文件的主类中定义一个版本号,就像在 C 中使用带有外部文件值的 #include 语句可以轻松完成的操作一样。我只想在该外部位置设置一个值,因此在我更改它之前编译/构建的任何 jar 文件都会获得相同的值。
我的第一个想法是在一个通用类中定义它,然后像这样简单地引用它:
我创建一个 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 并将其 jar 起来,然后执行它;正如预期的那样,它返回:
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
关于如何解决这个问题的任何建议?所以模块中的版本保持在编译时的状态,而不是在运行时的每个会话期间设置?