2

次のようにして変数をantに渡すと

ant -Dsomething=blah

build.xml で参照するにはどうすればよいですか? @something@${something}を試しましたが、どちらもうまくいかないようです。

最終的に私がやろうとしているのは、コンパイル時にいくつかのプロパティ (バージョン) を設定することです。

更新:もちろん、問題は別の場所にあることが判明しました-例を使用して最も完全に見える答えを受け入れます

4

3 に答える 3

6

これらのことを考えすぎると、嫌いではありませんか?

<project name="test">
    <echo message="The value of foo is ${foo}"/>
</project>

それでは、プログラムを実行します。foomyでプロパティの値を定義していないことに注意してくださいbuild.xml。代わりに、コマンド ラインから取得します。

$ ant -Dfoo=BAR_BAR_FOO

test:
     [echo] The value of foo is BAR_BAR_FOO

BUILD SUCCESSFUL
 time: 0 seconds

見る。特別なことは何もありません。コマンド ラインで設定したプロパティは、通常のプロパティと同様に扱います。

ここからが楽しみです。今回はプロパティfooを定義したことに注意してください。build.xml

<project name="test">
     <property name="foo" value="barfu"/>
     <echo message="The value of foo is ${foo}"/>
</project>

さあ、楽しみを見てください:

$ ant
test:
     [echo] The value of foo is barfu

BUILD SUCCESSFUL
 time: 0 seconds

foo次に、コマンド ラインでプロパティを設定します。

$ ant -Dfoo=BAR_BAR_FOO
test:
     [echo] The value of foo is BAR_BAR_FOO

BUILD SUCCESSFUL
 time: 0 seconds

コマンドラインがbuild.xmlファイル自体に設定した値を上書きすることを確認してください。このようにして、コマンド ライン パラメータで上書きできるデフォルトを設定できます。

于 2012-05-08T02:36:03.170 に答える
1

次のようなことをしたいようです。

<mkdir dir="build/src"/>
<copy todir="build/src" overwrite="true">
  <fileset dir="src" includes="**/*.java"/>
  <filterset>
    <filter token="VERSION" value="${version}"/>
  </filterset>
</copy>

...これにより、ソースがコピーされ、置き換えられます@VERSION@

public class a { public static final String VERSION = "@VERSION@"; }

...そしてbuild/srcあなたのjavacsrcに含めます。

とはいえ、ソースコピーの手順には費用がかかり、間違いなく混乱を招くため、このアプローチはお勧めしません。以前は、version.propertiesファイルをパッケージに。で保存していましたversion=x.y。私のJavaコードでは、とを使用Class.getResourceAsStream("version.properties")java.util.Propertiesました。私のbuild.xmlでは、を<property file="my/pkg/version.properties"/>作成できるように使用しましたoutput-${version}.jar

于 2012-05-07T23:31:37.733 に答える
0

${argsOne}私のために動作し、呼び出しコマンドが

ant -DargsOne=cmd_line_argument

Antのドキュメントにもそう書かれています。これは機能するはずです。で実行してant -debug、出力を貼り付けてみてください。

于 2012-05-11T20:52:59.960 に答える