0

我想在我的程序中进行条件编译。我知道,如果您声明一个公共静态最终布尔值,编译器将忽略未遍历的分支。是否可以在构建程序之前让 ant 目标更改变量?

例如,如果我有:

final public static boolean windows = false;

我想要两个 ant 目标:Windows 和 Mac。我希望命令 ant windows 将布尔值更改为 true,同时 ant mac 保持变量不变。

谢谢。

4

5 回答 5

11

你可以让 Ant 修改一个属性文件,然后你可以很容易地在你的应用程序中读取这个文件:)
new Properties(new FileInputStream("filename" / new File(filename)),并使用:或:

读取属性。
Boolean isWindows = new Boolean(properties.getProperty("windows"))


String os = properties.getProperty("os")

您可以使用 AntPropertyFile任务来执行此操作: http: //ant.apache.org/manual/Tasks/propertyfile.html

编辑:如果您绝对必须使用 Ant 编辑源代码文件,这是使用另一个任务的替代方法:

<replaceregexp file="blah.java" match="public static final boolean WINDOWS = \"(.*)\"" replace="public static final boolean WINDOWS = \"" + ${properties.windows} + "\"" />
-- 根据需要将代码替换为您自己的代码。有关详细信息,请参阅http://ant.apache.org/manual/Tasks/replaceregexp.html

于 2010-02-26T01:10:00.710 回答
2

您应该仔细阅读其他答案,看看是否有更好的解决方案适合您。但是,Ant 确实有一个任务是替换文件中的文本。例如:

<replace file="${src}/MyFile.java" token="boolean windows=true" value="boolean windows=false"/>

于 2010-02-26T02:10:53.897 回答
1

跳过 ant 和属性文件等,Java 已经这样做了!

使用类似 System.getProperty("os.name");

于 2010-02-26T01:15:40.950 回答
1

属性和替换任务应该可以满足您的需求。我同意找到不同的方法是个好主意。

但是,如果由于某种原因内置任务无法满足您的需求,那么为 ant 编写自定义任务非常容易。见http://ant.apache.org/manual/develop.html

于 2010-02-26T02:17:42.030 回答
0

您还可以在从 Ant 调用 Java 主程序时提供命令行值作为参数。

例如。ant -f build.xml "YouranttaskName" -Doperatingsys="windows"

在 build.xml 里面

<target name="YouranttaskName">
<java classname="javaclassname" fork="true" >
<arg value="${operatingsys}" />
</java>
</target> 

在 java -main 方法中,此参数值将以相同的顺序可用。即 args[0] 包含“Windows”。

您可以通过考虑您的默认操作系统值是什么来编写您的逻辑,因为用户可能不提供命令行参数,然后boolean flag'相应地设置 ' 参数。

于 2010-02-26T13:37:46.803 回答