2011-07-13 18 views
21

Antのプロパティファイルの使用に関する助けが必要です。Ant build.xmlの.propertiesファイルからの読み込み

  1. build.propertiesファイル:私は、次があります。このファイルには、 情報が1つ含まれています。on=1

  2. ant.xmlファイル。このファイルにはビルド手順が含まれています。

私はプロパティファイルから、値が、私は私のビルドファイルでタスクを実行する1ある場合on属性を読むことをお勧めします。さもなければ私はそれが何もしないことを望む。誰かがこれを達成する方法について私を導くことができますか?条件のタスクで

+0

あなたは何を意味するか、あなたが何かをしたいですか?私はant.xmlで何かを仮定していますか? – RMT

答えて

0

アプローチを、助けている場合、実際には、非常に簡単参照:カスタムAntタスクを書きます(1つのシンプルなJavaクラス、<コード20行)。タスクは

  1. は、プロパティファイルを読み込みます(場所/名前タスクの属性として渡すことができます)
  2. 次に、あなたがそれを使用することができます蟻プロパティに

onの値を代入あなたのフローコントロールのantプロパティ。

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>が必要です。それだけです。

+0

Antスクリプトでプロパティファイルをインポートできるときに、なぜこれを行う必要がありますか? – Perception

+1

@Perception - なぜこの貴重な情報から答えを出さないのですか?カスタムAntのタスクは間違いなくもっと楽しいです:) –

+0

Java APIを利用してAntの独自のビルドハーネスを作成することは、さらに楽しくなります。私は謙虚に要求したように答えを提出しました:-) – Perception

20

これは、あなたがする必要があるすべてでなければなりません:

をAntのインストールディレクトリのlibフォルダ内の ant-contrib JARと場所の最新バージョン1.Grab。タスクのようなもしそうなら、あなたのビルドスクリプト

<property file="build.properties"/> 

3.Addビルドスクリプトに次のtaskdefのエントリで

2.Includeあなたの特性

<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からインポートするプロパティに識別子を付けることができますiles。だから、例えば、あなたはそうのようなあなたのインポートを行うことができます:

<property file="build.properties" prefix="uniqueprefix"/> 

そして、あなたは「オン」だけで、あなたのファイルに「uniqueprefix.on」を参照して、代わりのでしょう。

<equals arg1="${uniqueprefix.on}" arg2="1" /> 

あなたはアリから内蔵の条件付きタスクを使用することができますが、私はあなたがそれを必要とする場合は、ANT-contribのがテーブルにもたらす余分な機能を持ったほうが良いでしょうという感じを持っています。また、ビルドファイルの名前は 'build.xml'で、 'ant.xml'ではないことに注意してください。それは、あなたが使用した名前があれば、Antは自動的にそれを見つけることができません。がんばろう。

+0

+1と私はそれを受け入れますが - この解決策では、これらの外部プロパティの特別な名前空間を選択する必要があることに注意する必要があります。偶然に。ただ、プロパティ 'on'も' build.xml'で定義されています... –

+1

@Andreas_D、実際にプロパティファイルに含まれるすべてのプロパティに一意の識別子を追加することが可能です。私はこの情報を含むように私の答えを更新します。 – Perception

3

次のようなタスクを実装したいと思うようです。

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

あなたが詳細で説明をしたいなら、私に教えてください。

mybuild.properties:

on=on 

使用

+0

thx非常に。しかし、私はまだ問題があります。一般にプロパティからの値 "on"は考慮されません。私が "on"を "off"に変更すると、taskbが呼び出されますが、 "on"に任意の数を割り当てた場合、taskaは常に実行されます。 – user842650

3

独自のAntタスクを作成するか、他のLIBSに、単に "クリーン" 蟻を使用しない場合は、このいずれかを見て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> 
+0

ありがとうございました:)それは働いています。私は私のプロジェクトに行くつもりです! :* – user842650

関連する問題