【发布时间】:2011-01-21 06:48:17
【问题描述】:
我想在我的程序中进行条件编译。我知道,如果您声明一个公共静态最终布尔值,编译器将忽略未遍历的分支。是否可以在构建程序之前让 ant 目标更改变量?
例如,如果我有:
final public static boolean windows = false;
我想要两个 ant 目标:Windows 和 Mac。
我想要命令
ant windows
将布尔值更改为真,同时
ant mac
保持变量不变。
谢谢。
【问题讨论】:
-
这真的有必要吗?为什么不在启动时从配置文件中加载一次布尔值?考虑一下您获得了多少(在运行时评估非静态非最终布尔变量没有实际成本),以及这对您的构建过程的影响。
-
@Thilo - 关键是 jar 中根本没有代码。属性文件并没有真正实现这一点,不过是个好主意。
-
如果是大量代码,中间的死代码导致的离域在性能方面可能非常显着。
-
考虑 OO 解决方案。为每个平台创建一个具有单独实现类的接口。然后只实例化相应平台的类。如果它们从未实例化,Java 将不会加载其他平台的类,因此它们不会占用内存或破坏本地化。您甚至可以将每个平台的类分发到单独的 jar 文件中,以便您可以选择将哪些部分分发给哪些用户。
-
您想要做的事情有有效的案例。它被称为“源代码检测”,并且有允许这样做的工具(不是 Ant AFAIK,但肯定可以使用 Ant 任务来执行源代码检测)。但是您提供的用例不是其中之一:)
标签: java ant preprocessor conditional-compilation