0

私のプログラムで条件付きコンパイルをしたいと思います。public static final boolean を宣言すると、コンパイラはトラバースされていないブランチを無視することを私は知っています。プログラムをビルドする前に、ant ターゲットに変数を変更させることは可能ですか?

たとえば、私が持っている場合:

final public static boolean windows = false;

Windows と Mac の 2 つのアリ ターゲットが必要です。 ant windows 変数をそのままにして、ブール値をtrueに変更する コマンドが欲しい ant mac です。

ありがとう。

4

5 に答える 5

11

Ant にプロパティ ファイルを変更させると、アプリケーションでこのファイルを非常に簡単に読み取ることができます:
new Properties(new FileInputStream("filename" / new File(filename))) 。


Boolean isWindows = new Boolean(properties.getProperty("windows"))


String os = properties.getProperty("os")

これを行うには、AntPropertyFileタスクを使用できます: http://ant.apache.org/manual/Tasks/propertyfile.html

編集: Ant を使用してソース コード ファイルを編集する必要がある場合は、別のタスクを使用する別の方法があります。

<replaceregexp file="blah.java" match="public static final boolean WINDOWS = \"(.*)\"" replace="public static final boolean WINDOWS = \"" + ${properties.windows} + "\"" />
-- 必要に応じて、コードを独自のものに置き換えます。詳細については、 http://ant.apache.org/manual/Tasks/replaceregexp.htmlを参照してください。

于 2010-02-26T01:10:00.710 に答える
2

他の回答を注意深く読んで、より良い解決策があるかどうかを確認してください。ただし、Ant にはファイル内のテキストを置き換えるタスクがあります。例えば:

<replace file="${src}/MyFile.java" token="boolean windows=true" value="boolean windows=false"/>

于 2010-02-26T02:10:53.897 に答える
1

antやプロパティファイルなどをスキップしてください。Javaはすでにこれを行っています。

System.getProperty( "os.name");のようなものを使用します。

于 2010-02-26T01:15:40.950 に答える
1

プロパティと置換タスクにより、必要なものが得られるはずです。別のアプローチを見つけることは良い考えであることに同意します。

ただし、何らかの理由で組み込みのタスクが必要なものを取得できない場合は、ant 用のカスタム タスクを作成するのは非常に簡単です。http://ant.apache.org/manual/develop.htmlを参照してください。

于 2010-02-26T02:17:42.030 に答える
0

Ant から Java メイン プログラムを呼び出すときに、引数として command-lind 値を指定することもできます。

たとえば。ant -f build.xml "YouranttaskName" -Doperatingsys="windows"

build.xml 内

<target name="YouranttaskName">
<java classname="javaclassname" fork="true" >
<arg value="${operatingsys}" />
</java>
</target> 

java -main メソッド内では、この引数値は同じ順序で使用できます。つまり、args[0] には「Windows」が含まれます。

boolean flag'ユーザーはコマンドライン引数を指定せず、それに応じて ' パラメータを設定できないため、デフォルトの OS 値を考慮してロジックを作成できます。

于 2010-02-26T13:37:46.803 に答える