プロパティ

説明

プロジェクトにプロパティ(名前と値で指定)またはプロパティのセット(ファイルまたはリソースから)を設定します。プロパティは大文字と小文字を区別します。

プロパティは不変です。最初にプロパティを設定した人は、ビルドの残りの部分でそれを固定します。プロパティは決して変数ではありません。

プロパティを設定するには7つの方法があります

これらの方法の組み合わせは可能ですが、一度に1つだけを使用する必要があります。たとえば、プロパティが設定される順序に問題が発生する可能性があります。

設定されるプロパティの値の部分には、他のプロパティへの参照が含まれている場合があります。これらの参照は、これらのプロパティが設定された時点で解決されます。これは、プロパティファイルからロードされたプロパティにも当てはまります。

定義済みプロパティのリストはこちらにあります。

Apache Ant 1.8.0以降、Java 5以降で実行している場合、Sun DTDに従ってXMLで定義されたプロパティをロードできます。そのためには、ファイル、リソース、またはURLの名前が.xmlで終わる必要があります。

パラメータ

属性 説明 必須
name 設定するプロパティの名前。 いいえ
value プロパティの値。 name属性が設定されている場合は、これらのいずれかまたはネストされたテキスト
location プロパティを指定されたファイルの絶対ファイル名に設定します。この属性の値が絶対パスである場合、変更されません(「/」と「\」文字は現在のプラットフォームの規則に変換されます)。それ以外の場合は、プロジェクトのbasedirを基準とした相対パスと見なされ、展開されます。
refid 他の場所で定義されたオブジェクトへの参照パスのような構造またはプロパティへの参照に対してのみ、妥当な結果が得られます。
resource プロパティファイル形式のプロパティ設定を含むクラスパスリソースの名前。 name属性が設定されていない限り、これらのいずれか1つ
file ロードするプロパティファイルの場所。
url プロパティ形式の設定を含むURL。
environment 環境変数を取得するときに使用するプレフィックス。したがって、environment = "myenv"を指定すると、プロパティ名myenv.PATHまたはmyenv.TERMを介してOS固有の環境変数にアクセスできます。末尾に「.」が付いたプロパティnameを指定した場合、それは2倍になりません。つまり、environment = "myenv."とすると、myenv.PATHおよびmyenv.TERMを通じて環境変数にアクセスできます。この機能は現在、選択したプラットフォームでのみ実装されています。この機能がサポートされているプラットフォームの数を増やすためのパッチを遠慮なく送信してください;-)。
また、オペレーティングシステムの環境変数では大文字と小文字が区別されない場合でも、プロパティでは大文字と小文字が区別されることに注意してください。たとえば、Windows 2000以降のシステムパス変数は、env.PATHではなくenv.Pathという名前のAntプロパティに設定されます。
runtime ランタイムプロパティを取得するときに使用するプレフィックス。したがって、runtime = "myrt"を指定すると、プロパティ名myrt.availableProcessorsmyrt.maxMemorymyrt.totalMemory、またはmyrt.freeMemoryを介して、Runtimeクラスのメソッドに対応するランタイム値にアクセスできます。末尾に「.」が付いたプロパティ名を指定した場合、それは2倍になりません。つまり、runtime = "myrt."とすると、myrt.maxMemoryなどのランタイムプロパティにアクセスできます。
また、プロパティ値は、propertyが実行された時点のスナップショットであることにも注意してください。_Ant 1.10.4以降_
classpath リソースを検索するときに使用するクラスパス。 いいえ
classpathref リソースを検索するときに使用するクラスパス。他の場所で定義された<path>への参照として指定されます。 いいえ
prefix fileresource、またはurlを使用してロードされたプロパティに適用するプレフィックス。指定されていない場合、「.」がプレフィックスに追加されます。 いいえ
prefixValues fileresource、またはurlを使用してロードされたプロパティの右側を展開するときにプレフィックスを適用するかどうか。_Ant 1.8.2以降_ いいえ;デフォルトは「false」です
relative 「true」に設定すると、basedirへの相対パスが設定されます。_Ant 1.8.0以降_ いいえ;デフォルトは「false」です
basedir 相対パスの計算元のbasedir。_Ant 1.8.0以降_ いいえ;デフォルトはプロジェクトのbasedirです

OpenVMSユーザー

environment属性を使用すると、このタスクはOpenVMSシステムで定義されているすべての論理をロードします。複数の等価名を持つ論理は、値がすべての等価名のカンマ区切りリストであるプロパティにマップされます。論理が複数のテーブルで定義されている場合、最もローカルな定義のみが使用可能です(テーブルの優先順位はPROCESS、JOB、GROUP、SYSTEMです)。

OpenVMS以外のOS

*Ant 1.8.2以降*、AntがJava 5以降で実行されていることを検出した場合、Antは独自のOS依存ネイティブ実装ではなく、System.getenv()を使用します。一部のOSでは、これにより、古いバージョンのAntと比較してわずかな違いが生じます。完全なリストについては、Bugzilla Issue 49366を参照してください。特に

ネストされた要素として指定されたパラメータ

classpath

Propertyclasspath属性はパスのような構造であり、ネストされたclasspath要素を介して設定することもできます。

プロパティfoo.distを値「dist」に設定します。

<property name="foo.dist" value="dist"/>

プロパティfoo.distを値「dist」に設定します。

<property name="foo.dist">dist</property>

foo.propertiesというファイルからプロパティのセットを読み取ります。

<property file="foo.properties"/>

アドレスhttps://www.mysite.com/bla/props/foo.propertiesからプロパティのセットを読み取ります。

<property url="https://www.mysite.com/bla/props/foo.properties"/>

foo.propertiesというリソースからプロパティのセットを読み取ります。

<property resource="foo.properties"/>

次を使用して、すべてのAntビルドのグローバルプロパティファイルを参照できることに注意してください

<property file="${user.home}/.ant-global.properties"/>

user.homeプロパティはJVMによってホームディレクトリとして定義されているためです。 user.homeプロパティがファイルシステムのどこに解決されるかは、オペレーティングシステムのバージョンとJVMの実装によって異なります。 Unixベースのシステムでは、これはユーザーのホームディレクトリにマップされます。最新のWindowsバリアントでは、これはおそらくDocuments and SettingsまたはUsersフォルダー内のユーザーのディレクトリに解決されます。 Windows 98 / MEなどの古いWindowsバリアントは、他のオペレーティングシステム/ JVMの組み合わせと同様に、予測できません。

システム環境変数を読み取り、「env」というプレフィックスを付けてプロパティに格納します。これは、_選択した_オペレーティングシステムでのみ機能することに注意してください。値の2つがエコーされていることが示されています。

<property environment="env"/>
<echo message="Number of Processors = ${env.NUMBER_OF_PROCESSORS}"/>
<echo message="ANT_HOME is set to = ${env.ANT_HOME}"/>

このビルドファイルは、build.propertiesで定義されているプロパティを使用します。環境変数STAGEに関して、一部またはすべての値が上書きされる可能性があります。たとえば、STAGE = testtest.propertiesがある場合、それに対する特別な値(テストサーバーの別の名前など)があります。最終的に、これらの値はすべて、ユーザーごとのファイルによる個人の設定で上書きできます。

<property environment="env"/>
<property file="${user.name}.properties"/>
<property file="${env.STAGE}.properties"/>
<property file="build.properties"/>

相対パスをfooに格納します:../my/file.txt

<property name="foo" location="my/file.txt" relative="true" basedir=".."/>

相対パスをfooに格納します:cvs/my/file.txt

<property name="foo" location="my/file.txt" relative="true" basedir="cvs"/>

プロパティファイル

述べたように、このタスクはファイルシステムに格納されているプロパティファイル、またはクラスパスのリソースとしてロードします。この機能に関する興味深い事実を以下に示します

  1. ファイルが存在しない場合、-verboseログレベル以外では何も出力されません。これにより、チームメンバーがカスタマイズできる、すべてのプロジェクトのオプションの構成ファイルを作成できます。
  2. この形式のルールは、java.util.Propertiesと一致します。
  3. 末尾のスペースは削除されません。それはあなたが望んでいたものかもしれません。
  4. 珍しい文字が必要ですか?それらを\u0456または\"スタイルでエスケープします。
  5. Antプロパティはファイル内で展開されます
  6. 同じファイル内で定義されたプロパティを展開し、タスクのprefix属性を使用する場合、プロパティを展開するときも同じプレフィックスを使用するか、prefixValuesを「true」に設定する必要があります。

ファイル内プロパティの展開は非常に便利です。その使用方法を学びましょう。

build.compiler=jikes
deploy.server=lucky
deploy.port=8443
deploy.url=https://${deploy.server}:${deploy.port}/

環境変数に関する注意事項

Antが環境変数からのプロパティの設定をサポートし始めたとき、System.getEnvが機能しないJava 1.2で実行されていました。そこで、環境変数を出力し、出力を分析してプロパティを作成する新しいプロセスでコマンドを開始することにしました。 Java 5を必要とするようになったAnt 1.9.0では、一部のプラットフォームで異なる結果が返されたとしても、System.getEnvに戻しました。以下で説明するコマンドは、OpenVMSで使用されるか、System.getEnvが例外をスローした場合に引き続き使用されます。

Execute.java の `getProcEnvCommand()` メソッドには、以下のオペレーティングシステム向けのコマンドが実装されています。

OS コマンド
OS/2 `cmd /c set`
Windows
* Win9x 系 `command.com /c set`
* その他 `cmd /c set`
`cmd /c set` (Windows NT 系) z/OS
`/bin/env` **または** `/usr/bin/env` **または** `env` (読み取り権限に依存 z/OS
Unix `env`
NetWare `env`
`env` OS/400