我需要一些帮助来使用Ant的属性文件。我有以下几点:读取Ant build.xml中的.properties文件
一个build.properties文件。该文件包含一条 信息:
on=1
ant.xml文件。该文件包含我的构建说明。
我想读on
属性从我的属性文件,如果该值是1
我想在我的构建文件执行任务。否则,我希望它什么都不做。任何人都可以指导我如何做到这一点?
我需要一些帮助来使用Ant的属性文件。我有以下几点:读取Ant build.xml中的.properties文件
一个build.properties文件。该文件包含一条 信息:on=1
ant.xml文件。该文件包含我的构建说明。
我想读on
属性从我的属性文件,如果该值是1
我想在我的构建文件执行任务。否则,我希望它什么都不做。任何人都可以指导我如何做到这一点?
的一种方法,这看起来很难,但是,其实很简单:写一个定制Ant任务(一个简单的java类,< 20行代码)。该任务将
on
值分配给蚂蚁财产然后你就可以使用您的流量控制的蚂蚁属性。
public class MyOwnTask extends Task {
private String filename = "build.properties"; // some default value
public void setFilename(String filename) {
this.filename = filename;
}
public void execute() { // the "main" method
Properties p = new Properties();
p.load(filename);
String onValue = p.get("on");
getProject().setProperty("ON_PROPERTY", onValue);
}
}
然后你需要一些<taskdef>
就是这样。
当您可以在Ant脚本中导入属性文件时,您为什么需要这样做? – Perception
@Perception - 你为什么不从这些有价值的信息做出答案?自定义蚂蚁任务肯定更有趣:) –
更有趣的是使用Java API为Ant编写自己的构建工具。我已经提交了一个答案,诚恳地要求:-) – Perception
这应该是所有你需要做的:
1.Grab ant-contrib JAR文件的最新版本,并发生在LIB你的Ant安装 文件夹中。
2.Include你在构建脚本
<property file="build.properties"/>
3.添加下面的taskdef进入构建脚本性能
<taskdef resource="net/sf/antcontrib/antcontrib.properties"/>
4.And然后最后,如果任务像这样定义:
<if>
<equals arg1="${on}" arg2="1" />
<then>
<echo message="I am going to do something here" />
</then>
<else>
<echo message="I am going to do nothing" />
</else>
</if>
请注意,您可以在从属性f导入的属性中预先标识标识符尔斯。因此,例如,你可以做你的进口,像这样:
<property file="build.properties" prefix="uniqueprefix"/>
然后你会在你的文件,“uniqueprefix.on“上”引用,而不是只。
<equals arg1="${uniqueprefix.on}" arg2="1" />
您可以使用内置的蚂蚁条件的任务,但是我有一种感觉,如果你需要它,你都与蚂蚁的contrib带来的表的附加功能更好。此外,请注意其标准命名您的构建文件为'build.xml',而不是'ant.xml'。事实上,鉴于您使用的名称,Ant将无法自动找到它。祝你好运。
+1,我接受它,但是 - 对于这个解决方案,我们必须小心,应该为这些外部属性选择一个特殊的命名空间 - 否则我们可能会覆盖现有的属性意外。试想一下,属性'on'也是在'build.xml'中定义的... –
@Andreas_D,它实际上可以为通过属性文件包含的所有属性附加一个唯一标识符。我会更新我的答案以包含此信息。 – Perception
对我来说,你想实现类似下面给出的任务。
<property file="build.properties" />
<target name="default" description="Homeworks">
<condition property="on">
<equals arg1="{on}" arg2="1" />
</condition>
<antcall target="taska" />
<antcall target="taskb" />
</target>
<target name="taska" if="on">
<echo message="Testing task one" />
</target>
<target name="taskb" unless="on">
<echo message="Testing task two" />
</target>
让我知道如果你想要一个解释,在细节。
thx非常。但我仍然有问题。没有考虑来自一般物业的价值“on”。如果我将“开”改为“关”蚂蚁调用任务b,但如果我将任何数字分配给“开”,taska始终运行。 – user842650
如果你不想写自己的Ant任务或使用其他库,只是“干净”的蚂蚁,看看这个例子:
mybuild.properties:
on=on
使用或者真的或类似的东西,1不会工作。
的build.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project name="project" default="default">
<property file="mybuild.properties"/>
<target name="default" depends="on, off" description="description">
<echo>default</echo>
</target>
<target name="on" if="${on}">
<echo>on</echo>
</target>
<target name="off" unless="${on}">
<echo>off</echo>
</target>
</project>
谢谢大家:))它的工作。我会继续我的项目! :* – user842650
你什么意思,你想做些什么?即时通讯假设与ant.xml? – RMT