コマンドラインから特定のjavac実行可能ファイルを使用するようにant
に指示するにはどうすればよいですか?
配布するライブラリ内にgccの一部としてビルドされたgcjをインストールしていて、それに対して特定のJavaソフトウェアをビルドしたいのですが、 system-gccを使用するために、「-Dbuild.compiler」などのオプションでは、ファイルパスではなく、ある種のJavaクラスを指定する必要があるようです。
MakefileのCCに似たものを期待していました。
それは本当に単純なことだと確信しています、そして私はただ愚かです。
明確にするために、可能であればビルドファイルを自分で編集することは避けたいと思います。コマンドラインでコンパイラをantに指定するだけの標準的な方法はありませんか?ビルドファイルがある意味で「正常に動作する」という仮定は気にしません。
Ant 1.6以降を使用している場合は、javac
属性fork="yes"
を設定できます。これにより、jikes、jvc、gcj、sj、または使用しているjavac
のバージョンを使用するときに、実行可能ファイルのパスを指定できます。
<javac srcdir="${src}"
destdir="${build}"
fork="yes"
executable="/opt/Java/jdk1.1/bin/javac"
compiler="javac1.1"
/>
-D
antを呼び出すときの引数は、Antスクリプト内のコマンドラインからプロパティを使用します。使用される形式は次のとおりです。
ant -Dmyvar=true
ここで、myvar
はプロパティの名前であり、true
はスクリプトで使用する値です。
その場合、最も簡単な方法は、javac実行可能属性のプロパティを使用することです。
<target name="compile">
<javac srcdir="${src}"
destdir="${build}"
fork="${fork}"
executable="${javac.executable}"
compiler="${compiler}"/>
</target>
次に、コマンドラインで次のように呼び出すことができます。
ant compile -Djavac.executable=/usr/bin/local/jdk/javac -Dsrc=/home/src -Dbuild=/home/build -Dcompiler=javac1.6 -Dfork=true
javacタスクページ から:
異なるコンパイラを使用することが可能です。これは、ビルド全体のすべてのタスクに影響するグローバルbuild.compilerプロパティを設定するか、現在のタスクに固有のコンパイラ属性を設定するか、orgを実装するtypedeffedまたはcomponentdeffedタイプのネストされた要素を使用することで指定できます。 Apache.tools.ant.taskdefs.compilers.CompilerAdapter。 build.compilerプロパティまたはcompiler属性の有効な値は次のとおりです。
classic
(JDK 1.1/1.2の標準コンパイラ)–javac1.1およびjavac1.2をエイリアスとして使用できます。modern
(JDK 1.3/1.4/1.5/1.6/1.7の標準コンパイラ)– javac1.3とjavac1.4、javac1.5とjavac1.6とjavac1.7(Ant 1.8.2以降)エイリアスとして使用されます。jikes
(Jikesコンパイラ)。jvc
(MicrosoftのSDK for Java/Visual J ++)のコマンドラインコンパイラ)–Microsoftをエイリアスとして使用できます。kjc
(kopiコンパイラ)。gcj
(gccのgcjコンパイラ)。sj
(Symantec Javaコンパイラ)–symantecはエイリアスとして使用できます。extJavac
(独自のJVMでモダンまたはクラシックのいずれかを実行します)。
私がこれを読む方法では、CompilerAdapterを実装し、コンパイラーを使用するクラスを作成する必要があります。次に、そのタスクをtypedefし、javacコンパイラ属性で使用します。
Ant Execタスクを使用して、以前に同様のことを行ったことがあります。 http://ant.Apache.org/manual/Tasks/exec.html を参照してください。
特定のシステムコマンドを呼び出すことができます。私たちの場合、特定のプロジェクト用にいくつかのDLLをビルドするために、Delphiを呼び出す必要がありました(尋ねないでください)。 execコマンドを使用すると、javacの代わりにgcjを呼び出すこともできます。