2

Java jdk (および jre) 1.6 がインストールされている Unix マシンで、Eclipse Juno を介して ant ファイルを生成しました。build.xml ファイルが配置されている eclipse の外部で ant をそのマシン上で実行すると、すべてがスムーズに進みます。

さて、問題は、jdk と jre 1.6 の両方がインストールされている別のマシンで ant を実行しようとしたときです。これは、RedHat 3 を実行している他のマシンで取得したものです (変更できません)。

> ant -version
Apache Ant version 1.5.2-23 compiled on November 12 2003

> java -version
java version "1.6.0_39"
Java(TM) SE Runtime Environment (build 1.6.0_39-b04)
Java HotSpot(TM) Client VM (build 20.14-b01, mixed mode, sharing)

> javac -version
javac 1.6.0_39

> ls -l `which java`
lrwxrwxrwx 1 root root   26 Feb 13 15:22 /usr/bin/java -> /usr/java/default/bin/java*

> ls -l `which javac`
lrwxrwxrwx 1 root root   27 Feb 13 15:22 /usr/bin/javac -> /usr/java/default/bin/javac*

> ls -l /usr/java
total 8
lrwxrwxrwx 1 root root   16 Nov  7 14:19 default -> /usr/java/latest
drwxr-xr-x 7 root root 4096 Feb 13 15:02 jdk1.6.0_39/
drwxr-xr-x 7 root root 4096 Nov  7 14:18 jre1.6.0_37/
lrwxrwxrwx 1 root root   21 Feb 13 15:03 latest -> /usr/java/jdk1.6.0_39

> echo $JAVA_HOME
/usr/java/jdk1.6.0_39/bin/java

そして、この行を build.xml ファイルに追加すると、次の結果が得られます

build.xml:
<echo message="Java version: ${ant.java.version}"/>

> ant 
  [echo] Java version: 1.4

およびコンパイルエラー:

  [javac] ...InputManager.java:11: error: Invalid method declaration, method name required.
  [javac]    Map<Double, List<MyObject>> loadFile(File pSelectedFile)
  [javac]              ^
  [javac] ...InputManager.java:11: error: Class or interface declaration expected.
  [javac]    Map<Double, List<MyObject>> loadFile(File pSelectedFile)
  [javac]              ^
  [javac] ...InputManager.java:33: error: Invalid character '@' in input.
  [javac]    @Override
  [javac]           ^
...

ここで問題は、Java のインストールが正しくないかどうかです。アリに何か問題がありますか?

build.xml ファイルの簡単な抜粋を次に示します。

> vim build.xml

<project basedir="." default="build" name="myProject">
  <property environment="env"/>
  <property name="ECLIPSE_HOME" value="/opt/eclipse"/>  <!-- that is also where eclipse is on my 2nd machine -->
  <property name="debuglevel" value="source,lines,vars"/>
  <property name="target" value="1.6"/>
  <property name="source" value="1.6"/>
[some stuff]
  <target name="init">
    <mkdir dir="bin"/>
    <copy includeemptydirs="false" todir="bin">
      <fileset dir="src">
        <exclude name="**/*.java"/>
      </fileset>
    </copy>
  </target>
  <target depends="init" name="build-project">
    <echo message="Java version: ${ant.java.version}"/>
    <javac debug="true" debuglevel="${debuglevel}" destdir="bin" includeantruntime="false" source="${source}" target="${target}">
      <src path="src"/>
      <classpath refid="myProject.classpath"/>
    </javac>
  </target>
</project>

ヘルプは大歓迎です:)

4

1 に答える 1

0

お使いのバージョンの ant は、古いバージョンの Java (2003) に対してコンパイルされています。Java 1.6 は 2006 年に登場しました。私が知ったように、次のように古いバージョンで ant を実行できます: http://www.coderanch.com/t/108814/tools/jdk-version-build-xml :

...............

Ant が 1.5 に対してコンパイルされている場合は、ビルド タスクを次のように変更できます。

<javac source="1.4" target="1.4" ...>…………しかし、その逆ではありません。したがって、最新バージョンの Ant が必要だと思います。

http://ant.apache.org/faq.html#java-versionから

Redhat ES 3.0 には ant 1.5.2 がインストールされています。PATH 変数と ANT_HOME 変数が最新バージョンの ant に正しく設定されている場合でも、常にプリインストールされたバージョンを使用する必要があります。

この OS で新しいバージョンの ant を使用するには、次のようにします。

$ ant -version
Apache Ant version 1.5.2-23 compiled on November 12 2003
$ su -
# rpm -e ant ant-libs
# exit
$ hash -r
$ ant -version
Apache Ant version 1.6.2 compiled on July 16 2004
于 2013-02-25T10:18:52.273 に答える