0

私はアリがどのように機能するかを研究していますが、それに関連していくつかの疑問があります。次のように始まる ant xml スクリプト定義ファイルがあります。

<?xml version="1.0"?>
<project name="Peacock Engine" default="default">       <!-- "default" is the default target -->

<tstamp />

<!-- ============================================ -->
<!-- Load build properties                        -->
<!-- ============================================ -->

<property name="project.buildfile" value="build.num" />

<property file="${project.buildfile}" />

<property file="info.properties" />

<!-- ============================================ -->
<!-- Specify the classpath                        -->
<!-- ============================================ -->

<path id="project.classpath">
    <fileset dir="${project.libdir}">
        <include name="${project.libs}" />
    </fileset>
</path>

<!-- ============================================ -->
<!-- The default target                           -->
<!-- ============================================ -->

<target name="default" depends="jar"/>

これを分析するのを手伝ってください:

1)プロジェクトタグはルート ターゲットであり、プロジェクト属性を指定するために使用します。

2): この行は正確には何ですか?

3) 次に、次の行があります。

<property name="project.buildfile" value="build.num" />
<property file="${project.buildfile}" />
<property file="info.properties" />

正確には何をしますか?最初の行は、 project.buildfileという名前の変数のようなものを作成し、そこにbuild.numという名前のファイルの内容をロードすると 思います。次の 2 行に関して、それらが何をするのかほとんどわかりません...助けてもらえますか?

4) 次に、ant スクリプトで次の行を見つけます。

<!-- ============================================ -->
<!-- Specify the classpath                        -->
<!-- ============================================ -->

<path id="project.classpath">
    <fileset dir="${project.libdir}">
        <include name="${project.libs}" />
    </fileset>
</path>

Webで検索しようとしましたが、このセクションについてまったくわかりません

5) 最後に、特定のタスク (特定のターゲット) を指定せずに ant スクリプトを起動したときに実行されるデフォルトのアクションであるデフォルトのターゲットの定義であるこのセクションがあります。

<!-- ============================================ -->
<!-- The default target                           -->
<!-- ============================================ -->

<target name="default" depends="jar"/>

私はそれについて完全には確信が持てませんが、この行では、antスクリプトのデフォルトの動作はプログラムをコンパイルすることであり、コンパイルされたプログラムはJarファイル内に配置されると言っていると思います.

このスクリプト コードの理解を深めるために誰か助けてくれませんか?

TNX

アンドレア

4

4 に答える 4

3

1) および 2) これにより、プロジェクトの名前が "Peacock Engine" に設定され、デフォルト タスクが "default" という名前のタスクに設定されます (5) を参照)。特定のタスクを指定せずに Ant を呼び出すと、デフォルトのタスクが実行されます。

<project name="Peacock Engine" default="default">

3)<property name="project.buildfile" value="build.num" />を使用して、Ant ファイルのどこにでもアクセスできるプロパティを作成します${project.buildfile}。物件の価値はbuild.num

<property file="${project.buildfile}" />上記で定義されたプロパティを使用します。基本的に、ファイル「build.num」をロードし、このファイルで定義されているすべてのプロパティを後で使用できるようにします。プロパティ ファイルはどのように機能しますか? プロパティ ファイル task の ant ドキュメントを参照してください

<property file="info.properties" />「info.properties」と呼ばれる別のプロパティ ファイルをロードし、このファイル内のすべてのプロパティを Ant で使用できるようにします。

4)

<path id="project.classpath">
    <fileset dir="${project.libdir}">
        <include name="${project.libs}" />
    </fileset>
</path>

このタグはクラスパスを定義します。pathタグはファイルセットを囲みます。${project.libdir}ファイルセットには、名前が含まれるすべてのライブラリが含まれます${project.libs}。両方とも、上記のプロパティ ファイルを含めることによって定義された可能性がある変数です。事実上、このタグは、ID ( ) を参照することで、ビルド ファイルの任意の場所に含めることができる一連のライブラリを提供しますproject.classpath

5) <target name="default" depends="jar"/>1)を参照。ターゲットが指定されていない場合、project タグはこのターゲットをデフォルトのターゲットとして参照します。このターゲットには、依存する別のターゲットがあります。「depends」で指定されたターゲットは、「default」の前に実行されます。繰り返しますが、「jar」に依存する別のターゲットがある場合、このターゲットが最初に実行されます。「コールグラフ」です。詳細については、ターゲットに関するドキュメントを参照してください。

Antに慣れるための出発点として、簡単なビルド ファイルを作成するための Ant ドキュメントを参照することをお勧めします。

于 2013-10-04T16:37:16.913 に答える
1

Ant マニュアルにアクセスして、一読する必要があります。多くの質問を理解するのに役立ちます。

プロジェクトライン

Ant ファイルは XML ファイルであり、XML ファイルには他のすべてのエンティティを囲むルートエンティティがあります。これが<project>エンティティです。簡単な Ant build.xml ファイルを次に示します。

<project>
    <echo message="Hello, World!"/>
</project>

このファイル内の唯一のタスク ( ) は、 XML エンティティ<echo>で囲まれています。<project>

<project>エンティティはいくつかの属性を取ることができます:

  • name: Ant プロジェクトの名前。館内でご利用いただけ${ant.project.name}ます。
  • default:実行するデフォルトのターゲット。Ant には基本的に 2 レベルの階層があります。目標があり、タスクがあります。ターゲットは実行したいもの (コンパイル、パッケージ化、実行、クリーンなど) であり、ターゲットは実行したいことを達成するためのタスクが含まれています。
  • basedir: ディレクトリを指定するときに使用するベース ディレクトリ。デフォルトは現在のディレクトリです。
  • XML Namespaces:今は気にしないでください。Ant に慣れるまで、これを使用することはありません。

敷地境界線:

次に、次の行があります。

<property name="project.buildfile" value="build.num" />
<property file="${project.buildfile}" />
<property file="info.properties" />

Ant は、変数と考えることができるプロパティと呼ばれるものを使用します。ただし、プロパティは一度設定すると変更できません。例えば:

<property name="foo" value="This is the initial value of foo"/>
<property name="foo" value="This is my new value"/>

最初の行はThis is the initial value of foo に${foo}設定されています。2 行目は何もしません。実際、それは失敗でも何でもありません。単に値をリセットしません。

これを使用して、ビルドが行われる前に Ant が最初に読み込むプロパティ ファイルを作成することで、ビルド システムを調整できます。最初の行は${project.buildfile}、ファイルに呼び出されるプロパティを設定しますbuild.num。これはビルド番号です。2 行目は、このファイルのすべてのプロパティを読み取り、それらの値を設定します。3 行目は、他のプロパティを設定できる別のプロパティ ファイルを読み込みます。簡単な例を次に示します。

<project>
    <property file="build.num"/>
    <property name="build.number" value="Not Set"/>
    <echo message="The build number is ${build.number}"/>
</project>

というファイルがないとしましょうbuild.num。この場合、${build.number}は に設定されNot Set、ビルド ファイルは次のように出力されます。

The build number is Not Set

では、 というファイルを作成しましょう。build.numこれは次のとおりです。

build.number = 1234

ビルドを実行するとbuild.number、ファイルからプロパティが読み込まれbuild.numます。ビルド番号は既に設定されているため、<property name="build.number" value="Not Set"/>変更されません。ビルドは次のように出力されます。

The build number is 1234

ここで、ビルドを次のように実行するとします。

$ ant -Dbuild.number=9876

${build.number}コマンドラインで設定しています。ビルドは引き続きファイルを読み取りますが、既に設定しているため、そこからbuild.num設定しません。はすでに設定されているため、${build.number}この行<property name="build.number" value="Not Set"/>も無視されます。${build.number}

次に、ant スクリプトで次の行を見つけます。

<!-- ============================================ -->
<!-- Specify the classpath                        -->
<!-- ============================================ -->

<path id="project.classpath">
    <fileset dir="${project.libdir}">
        <include name="${project.libs}" />
    </fileset>
</path>

Ant には 2 種類のデータがあります。1つは、上で述べたプロパティです。もう 1 つはPathsです。パスは、一連のファイルまたはディレクトリです。これは、Unix と Windows でPATH環境変数を使用して表示されます。

$ echo $PATH
$ /bin:/usr/bin:/usr/local/bin:/home/david/bin

コマンドを入力すると、オペレーティング システムは PATH 内の各ディレクトリを検索してそのコマンドを見つけます。Java では、CLASS_PATHプロジェクトをコンパイルするために必要な jar があります。

というパスを設定していますproject.classpath<fileset>基本的に、基準に一致するすべての jar を取得し、後でコンパイルに使用できるパスに配置します。

ターゲット:

<target name="default" depends="jar"/>

前述したように、Ant には 2 つのレベルの階層があります。ターゲットは、達成したいことです。それらをプログラムと考えてください。compileターゲットは、コードをコンパイルするためのプログラムです。ターゲットには、ターゲットを実行するために実行する必要があるタスクが含まれています。

一部のタスクは、他のタスクに依存しています。たとえば、コードをテストするターゲットは、コードをコンパイルするターゲットに依存します。最初にコンパイルしないと、コードをテストできません。

<target name="test" depends="compile">
    ....
</target>

一部のターゲットは、単に他のターゲットを指定します。たとえば、 というターゲットがありallます。これにより、ターゲットが実行され、ディレクトリ構造がクリーンアップされ、以前にビルドされたファイルが削除され、コードがコンパイルされ、テストが実行され、コードがパッケージ化されます。

<target name="all" depends="clean,compile,test,package"/>

ターゲット自体はall何もしません。これは、他のすべてのターゲットを 1 つの使いやすいターゲットに結合する方法にすぎません。を実行するallと、完全なビルドを実行するために必要なすべてが完了しました。

この場合、開発者は、ターゲットdefaultを実行すると呼ばれるターゲットを定義していjarます。<project>エンティティで、このプロジェクトのデフォルト ターゲットが と呼ばれていることがわかりますdefault。したがって、ターゲットを指定せずに Ant を実行すると、defaultターゲットが実行されます。

これは少し複雑です。開発者はこれを省略して、単にエンティティに設定default="jar"することもできました。<project>

前に述べたように、Ant マニュアルにアクセスすると、Ant の学習に役立ちます。さらに、これらのさまざまなタスクについて詳しく知るために使用できる参考資料を提供してください。

于 2013-10-04T17:26:08.383 に答える
1

1) プロジェクト タグはルート ターゲットであり、プロジェクト属性を指定するために使用します。

project タグはプロジェクトに名前を付けるだけで、デフォルトのターゲットも定義されています。project タグ自体はターゲットではありません。

<property name="project.buildfile" value="build.num" />

という名前のプロパティを作成しproject.buildfile、値を「build.num」に設定します

<property file="${project.buildfile}" />

ファイルから一連のプロパティを読み取ります。ファイルの名前はプロパティに格納されていますproject.buildfile。この場合、値は「build.num」です。

<property file="info.properties" />

「info.properties」という名前のファイルから一連のプロパティを読み取ります

<path id="project.classpath">
    <fileset dir="${project.libdir}">
        <include name="${project.libs}" />
    </fileset>
</path>

path名前付きの「project.classpath」を作成します。パスには、projectlib.dir プロパティで定義されたルートがあり、project.libs プロパティで定義されたすべてのファイルが含まれます。

<target name="default" depends="jar"/>

ターゲットは、ターゲットが最初に正常に完了することdefaultに依存していることを意味します。jarAnt は、jarこの要件を満たすためにターゲットを自動的に実行します。

Apache はここで Ant のマニュアルを管理しています

于 2013-10-04T16:44:40.990 に答える
0

Dude Maven はブロックの新しい子供です。試してみると、ANT は必要ありません。私はそれを1か月間使用しており、もうANTに戻ることはありません. プロジェクトで使用する方法については、オンラインで多くのチュートリアルがあります。Maven ウェブサイト

于 2013-10-04T18:16:43.710 に答える