4

ant build.xml を読み取り、そこから要素を取得するための Ant API はありますか? 具体的には、パス要素の値を取得し、パス内のすべての要素をウォークできるようにしたいと考えています。

私の目的は、特定のパスを取得し、それがマニフェストで正しく参照されていることを確認して、製品が本番環境に移行したときにビルドとマニフェストが一致するようにすることです。

EDIT:XML APIを使用するための応答(およびそれらに感謝します)に関して、問題は、現在構築されているビルドファイルがそれよりも複雑であることです。つまり、クラスパスは別のクラスパスを参照してそれをインクルードし、クラスパスで参照されている要素自体がプロパティ ファイルで定義されているため、合理的に再作成するには Ant API が多すぎます。

4

4 に答える 4

8

クラスを使用ProjectHelperして、ビルドファイルでプロジェクトを構成できます。チェックしたいパスが参照に含まれている場合は、その ID でプロジェクトから参照を取得できます。

たとえば、 に次のようなものがある場合build.xml:

<path id="classpath">
    <fileset dir="${basedir}/lib" includes="*.jar"/>
</path>

Path次に、次のコードで参照を取得できます。

import java.io.File;

import org.apache.tools.ant.Project;
import org.apache.tools.ant.ProjectHelper;
import org.apache.tools.ant.types.Path;

public class Test {
    public static void main(String[] args) throws Exception {    
        Project project = new Project();
        File buildFile = new File("build.xml");
        project.init();
        ProjectHelper.configureProject(project, buildFile);

        Path path = (Path) project.getReference("classpath");
     }
}

ProjectHelper.configureProjectant 1.6.2 では推奨されていませんが、1.7 では推奨されていないことに注意してください。

于 2009-05-06T21:02:54.713 に答える
3

Ant スクリプトで xml ファイルを解析して、java ファイルを実行したり、プロパティ値などを読み取ったりする必要がある場合があります。とても簡単で、 というタグでこれを行うことができます<xmlproperty>。このタグはxmlファイルをロードし、xmlファイルのすべての値をantプロパティ値に内部的に変換し、それらの値をantプロパティとして使用できます。例えば

<root>
    <properties>
      <foo>bar</foo>
    </properties>
</root>

これは、次のように ant スクリプト ファイルにほぼ同等で <property name="root.properties.foo" value="bar"/> あり、この値を ${root.properties.foo} で出力できます。

完全な例: 1. Info.xml などの xml ファイルを 1 つ作成します。 2. Check.xml などの ant スクリプトを 1 つ作成します。

情報.xml

<?xml version="1.0" encoding="UTF-8"?>
<Students>

  <Student>
    <name>Binod Kumar Suman</name>
        <roll>110</roll>
    <city> Bangalore </city>
  </Student>


</Students>

チェック.xml

<?xml version="1.0" encoding="UTF-8"?>
<project name="Check" default="init">
 <xmlproperty file="Info.xml" collapseAttributes="true"/>

<target name = "init">
  <echo> Student Name :: ${Students.Student.name} </echo>
  <echo> Roll :: ${Students.Student.roll} </echo>
  <echo> City :: ${Students.Student.city} </echo>
</target>

</project>

この (Check.xml) ant スクリプトを実行すると、出力が得られます。

Buildfile: C:\XML_ANT_Workspace\XML_ANT\src\Check.xml init: [echo] Student Name :: Binod Kumar Suman [echo] Roll :: 110 [echo] City :: Bangalore BUILD SUCCESSFUL 合計時間: 125 ミリ秒

ここまでは非常に簡単でしたが、xml (StudentsInfo.xml) に複数のレコードがある場合、このようにカンマ区切りですべてのレコードが表示されます。

Buildfile: C:\XML_ANT_Workspace\XML_ANT\src\Check.xml init: [echo] Student Name :: Binod Kumar Suman,Pramod Modi,Manish Kumar [echo] Roll :: 110,120,130 [echo] City :: Bangalore,Japan,Patna BUILD SUCCESSFUL 合計時間: 109 ミリ秒

リンク

于 2009-06-21T18:04:29.210 に答える