- PR -

Antのjavacタスクでgenericsを使用するには

1
投稿者投稿内容
おかもと
大ベテラン
会議室デビュー日: 2003/06/08
投稿数: 182
投稿日時: 2006-09-01 23:15
Ant1.6.5とJDK1.5.0_07でジェネリックスを使用したソースを
コンパイルしたいのですが、下記の通りコンパイルエラーが発生します。
コード:
Buildfile: build.xml

compile:
   [delete] Deleting directory C:\Temp\build
    [mkdir] Created dir: C:\Temp\build
    [javac] Compiling 1 source file to C:\Temp\build
    [javac] C:\Temp\src\test\Test.java:7: '(' または '[' がありません。
    [javac]             List<String> list = new ArrayList<String>();
    [javac]                                                  ^
    [javac] エラー 1 個

BUILD FAILED
C:\Temp\build.xml:8: Compile failed; see the compiler error output for details.

Total time: 1 second



上記エラーが発生したときのビルドファイルは以下の通りです。

コード:
<?xml version="1.0" encoding="Shift_JIS"?>
<project name="javac-test" default="compile" basedir=".">
	<target name="compile" description="コンパイル">
		<delete dir="build" />
		<mkdir dir="build"/>
		<javac srcdir="src"
			destdir="build"
		>
		</javac>
	</target>
</project>



同様に試したソースは以下の通りです。

コード:
package test;

import java.util.*;

public class Test{
	public void test(){
		List<String> list = new ArrayList<String>();
	}
}



そこでantのマニュアルを参考に以下の通りビルドファイルを修正しました。

コード:
<?xml version="1.0" encoding="Shift_JIS"?>
<project name="javac-test" default="compile" basedir=".">
	<target name="compile" description="コンパイル">
		<delete dir="build" />
		<mkdir dir="build"/>
		<javac srcdir="src"
			destdir="build"
			fork="java$$javac.exe"
			source="1.5"
		>
		</javac>
	</target>
</project>



すると以下の通りエラーになります。

コード:
Buildfile: build.xml

compile:
   [delete] Deleting directory C:\Temp\build
    [mkdir] Created dir: C:\Temp\build
    [javac] Compiling 1 source file to C:\Temp\build
    [javac] javac: 1.5 は無効なソースバージョンです。
    [javac] 使い方: javac <options> <source files>
    [javac] 使用可能なオプションには次のものがあります。
以下略



javacコマンドを直接使用した場合は特にsourceオプションを指定しなくても
コンパイルできますし、"-source 1.5"としてもエラーにはなりません。

Antのバグのようにも見えるのですが、ネットで調べても同じような問題を
見つけることが出来ませんでした。何か使い方に問題が有るのでしょうか?

なお、OSはWindowsXPです。
大ベテラン
会議室デビュー日: 2006/06/28
投稿数: 116
投稿日時: 2006-09-02 00:33
多分なのですが、パス設定がまずくて思っているものと異なるjavacが呼ばれているのではないでしょうか。
antのjavacエレメントボディ部に以下の設定を追加してバージョンを確認してみてください。
コード:
<compilerarg line="-version"/>


ちなみに、以下の環境で提示されたソースをコンパイルしたところ正常にコンパイルできました。
・Ant1.6.5
・JDK1.5.0_06
おかもと
大ベテラン
会議室デビュー日: 2003/06/08
投稿数: 182
投稿日時: 2006-09-02 12:02
調査してみました。

駄目な場合は教えていただいたオプションを指定しても
”[javac] javac: -version は無効なフラグです。”
と言うことで、バージョン番号を確認することが出来ませんでした。

しかし、環境変数JAVACMDに指定していたj2sdk1.4.2のjava.exeを無効にすると
問題無くコンパイルすることが出来ました。
java.exeとjavac.exeは別物と考えていましたが、Antが1.4.2のJVMで
実行されていたと考えると、コンパイルが通らないのも説明が付きますね。

どうもありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)