代码之家  ›  专栏  ›  技术社区  ›  kgrad

可以用Ant修改源代码吗?

  •  0
  • kgrad  · 技术社区  · 15 年前

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

    例如,如果我有:

    final public static boolean windows = false;

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

    谢谢。

    5 回复  |  直到 15 年前
        1
  •  11
  •   Chris Dennett    14 年前

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

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

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

    你可以用蚂蚁 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 详情。

        2
  •  1
  •   jqa    15 年前

    跳过Ant和属性文件等,Java已经做到了!

    使用System.GetProperty(“os.name”)之类的东西;

        3
  •  1
  •   Greg Charles    15 年前

    你应该仔细阅读其他答案,看看是否有更好的解决方案。然而,Ant有一个任务来替换文件中的文本。例如:

    <替换文件=“${Src}/MyField.java”令牌=“布尔Windows = true”值=“布尔Windows = false”//gt;

        4
  •  1
  •   Development 4.0    15 年前

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

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

        5
  •  0
  •   lucentmind    15 年前

    您还可以在从AND调用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方法中,这个参数值将以相同的顺序可用。

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