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

标签 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>

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

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

请帮忙。

最佳答案

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

<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>

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

ant -DSIMV3.1=true

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

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

package sandbox;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

public class Sandbox {

    public static void main(String[] args) {

        String resource = "/sandbox/resources/SIMV3.1";
        InputStream stream = Sandbox.class.getResourceAsStream(resource);
        InputStreamReader reader = new InputStreamReader(stream);
        BufferedReader buffer = new BufferedReader(reader);
        boolean simv3_1 = false;

        try {

            simv3_1 = Boolean.parseBoolean(buffer.readLine());
        }
        catch (IOException e) {

            e.printStackTrace();
        }

        System.out.println("SIMV3.1 = " + simv3_1);
    }
}

关于java - 如何使用 build.xml 在 java 代码中设置属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27700193/

相关文章:

java - JFreeChart 在动态图表中丢失数据

java - 从一个 Android-Source-Tree 构建两个 APK

java - 使用带有 Apache Ivy 的自定义存储库,未找到解析器

java - 在 Apache Ant 中使用 <java> 标签,我可以同时运行 Server 和 Proxy Server 类吗

Java生成原理图/图表,运行时编辑和打印选项

java - Android Java如何制作单条形图

windows - 从 GIT 存储库构建

windows - 回显到文件时 Ant 不会创建 NL

java - 生成具有动态大小 d 的所有可能组合?

java - 在 java/spring 中使用以下格式从属性文件中读取并提取对象