如何使用build.xml在java代码中设置属性

时间:2014-12-30 05:45:27

标签: java ant

我是Ant的新手,我们将不胜感激。

我想做的是:

当我调用Ant目标时,我正在做:

ant -DSIMV3.1=true run-tenantManagement

现在在build.xml中,我有:

<target name="run-tenantManagement" depends="jar">
   <property name="SIMV3.1" value="${SIMV3.1}" />
    ...
</target>

现在我想在我的java代码中看到属性SIMV3.1的值。 因为在我的java代码中,我想设置一个条件:

if(SIMV3.1==true){
//do something
}else{
//do something else
}

请帮助。

2 个答案:

答案 0 :(得分:3)

就目标构建中的属性值(即生成的jar文件)而言,另一种更持久的方法是让ant将属性值写入到包含在目标jar文件中的资源文件中。这样可以使在构建过程中设置的属性值具有更好的寿命(因为缺少更好的单词),以便可以在项目(即build的)产品中使用它。例如,示例ant文件可能如下所示:

Language standard

如果没有提供 condition 任务,则该属性值默认为false,并且 resources 任务将该属性值写入将包含在jar文件中的资源文件(在 build 任务中)。因此,像这样构建:

<project name="sandbox" basedir="." default="build">
    <condition property="SIMV3.1" value="${SIMV3.1}" else="false">
        <isset property="SIMV3.1"/>
    </condition>

    <target name="clean">
        <delete verbose="${verbose}" dir="bin" failonerror="false"/>
        <delete verbose="${verbose}" file="lib/sandbox.jar" failonerror="false"/>
    </target>

    <target name="compile">
        <mkdir dir="bin"/>
        <javac srcdir="src" destdir="bin"/>
    </target>

    <target name="resources">
        <echo file="bin/sandbox/resources/SIMV3.1">${SIMV3.1}</echo>
    </target>

    <target name="build" depends="compile, resources">
        <mkdir dir="lib"/>
        <jar destfile="lib/sandbox.jar" basedir="bin">
            <manifest>
                <attribute name="Main-Class" value="sandbox.Sandbox"/>
            </manifest>
        </jar>
   </target>
</project>

将导致将一个“ true”值写入 resources 包中的 SIMV3.1 文件。在未指定属性的情况下调用ant会导致将默认属性 false 写入该资源文件。

在代码中,可以通过 InputStream 访问此资源,方法是从文件中读取第一行(也是唯一一行),并使用 Boolean 类来解析该行,如下所示:

ant -DSIMV3.1=true

答案 1 :(得分:0)

您可以在java ant任务中使用sysproperty来设置属性。

<target name="run-tenantManagement" depends="jar">
    <java classname="props"    fork="true">
        <sysproperty key="SIMV3.1"
             value="${SIMV3.1}"
             />
    </java>
</target>

这可以在java类中读取,如下所示,

import java.util.Properties;
public class props {
    public static void main( String[] args )
    {
        String     testProp = "SIMV3.1";
        Properties sysProps = System.getProperties();
        System.out.println( "Value of " + testProp + " is " +
                        sysProps.getProperty(testProp) );
    }
 }