是否可以使用ant修改源代码?

时间:2010-02-26 01:01:52

标签: java ant preprocessor conditional-compilation

我想在我的程序中进行条件编译。我知道如果你声明一个public static final boolean,编译器将忽略未遍历的分支。在构建程序之前,是否可以让ant目标更改变量?

例如,如果我有:

final public static boolean windows = false;

我想要两个蚂蚁目标:Windows和Mac。 我想要这个命令 ant windows 将布尔值更改为true,同时 ant mac 将变量保留原样。

感谢。

5 个答案:

答案 0 :(得分:11)

您可以让Ant修改属性文件,然后您可以非常轻松地在应用程序中阅读此文件:
new Properties(new FileInputStream("filename" / new File(filename))),

并使用以下方式阅读属性:
Boolean isWindows = new Boolean(properties.getProperty("windows"))

或:
String os = properties.getProperty("os")

您可以使用Ant PropertyFile任务执行此操作: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

答案 1 :(得分:1)

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

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

的内容

答案 2 :(得分:1)

您应仔细阅读其他答案,看看是否有更好的解决方案。但是,Ant确实需要替换文件中的文本。例如:

&lt; replace file =“$ {src} /MyFile.java”token =“boolean windows = true”value =“boolean windows = false”/&gt;

答案 3 :(得分:1)

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

但是,如果由于某种原因,内置任务不会得到你 你需要什么,为ant编写自定义任务非常容易。 见http://ant.apache.org/manual/develop.html

答案 4 :(得分:0)

您还可以在从Ant调用Java主程序时提供command-lind值作为参数。

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

内部build.xml

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

在java -main方法中,这个参数值将以相同的顺序提供.i.e。 args [0]包含“Windows”。

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