2013-04-16 8 views
7

だと思っている、これはこの質問ではありません。Ant is using wrong java versionAntは間違ったJavaコンパイラを使用したが、それだけで明確にする権利

私は、Mac OS 10.8.2マシン上でAntを使用したJava 1.7プロジェクトをコンパイルしようとしています。私はJava 1.7をインストールしており、Eclipseはそれを劇的に構築しています。そう

ant -v 

のようなアリのコマンドライン実行してAntビルドスクリプトを使用する場合ただし、出力はせいぜい神秘的である:最初の行はAntが$ JAVA_HOMEの場所から、要求されているJava 1.7を使用していることを明らかにし、私は自分自身を設定します。

[javac] /Users/emish/School/cis555/homework/cis-555-search-engine/src/pokedex/crawler/CrawlCore.java:186: <identifier> expected 
[javac]   } catch (IOException | ClassNotFoundException | InterruptedException e) { 
[javac]       ^

これは非常に奇妙である:彼らは唯一のバージョンで前のJava 1.7に発生するコンパイラエラーを明らかにするため

Apache Ant(TM) version 1.8.2 compiled on December 20 2010 
Trying the default build file: build.xml 
Buildfile: /Users/emish/School/cis555/homework/cis-555-search-engine/build.xml 
Detected Java version: 1.7 in: /Library/Java/JavaVirtualMachines/jdk1.7.0_17.jdk/Contents/Home/jre 
Detected OS: Mac OS X 

ただし、次のコンパイラエラーは、意味をなさない。私は、Java JDKの再インストールやAntの再インストールなど、多くのことを試しました。そこにいる誰かが、この困惑している問題を引き起こしている可能性について、いくつかの洞察を持っていますか?

それは任意のヘルプだ場合:

java -version 
java version "1.7.0_17" 
Java(TM) SE Runtime Environment (build 1.7.0_17-b02) 
Java HotSpot(TM) 64-Bit Server VM (build 23.7-b01, mixed mode) 

javac -version 
javac 1.7.0_17 

echo $JAVA_HOME 
/Library/Java/JavaVirtualMachines/jdk1.7.0_17.jdk/Contents/Home 

ll `which javac` 
lrwxr-xr-x 1 root wheel 75 Oct 30 22:27 /usr/bin/javac -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/javac 

ll `which java` 
lrwxr-xr-x 1 root wheel 74 Oct 30 22:27 /usr/bin/java -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java 

編集:コメンターが要求したように、私は以下の私のbuild.xmlとMANIFEST.MFファイルを追加しました。

のbuild.xml

<?xml version="1.0"?> 

<project name="pokedex" default="jar" basedir="."> 
    <property name="shared.root" location="${basedir}"/> 
    <property name="project.root" location="${basedir}"/> 
    <property name="build.dir" location="${project.root}${file.separator}build"/> 
    <property name="src" location="${project.root}${file.separator}src"/> 
    <property name="build.classes" location="${build.dir}${file.separator}classes"/> 
    <property name="test.classes" location="${build.classes}${file.separator}test"/> 
    <property name="test.source" location="${src}${file.separator}test"/> 
    <property name="lib.dir" location="${project.root}${file.separator}lib"/> 


    <target name="jar" depends="clobber, compile" description="Create Jar file"> 
      <jar destfile="pokedex.jar"> 
      <fileset dir="${build.classes}" includes="**/*.class"/> 
      <fileset dir="${project.root}" includes="conf/*"/> 
      </jar> 
    </target> 

    <target name="compile" depends="clobber" description="compiles Java source code"> 
     <javac srcdir="${src}${file.separator}" destdir="${build.classes}" debug="on" deprecation="off" 
      optimize="on" includeAntRuntime="no"> 
      <classpath> 
       <fileset dir="${lib.dir}"> 
        <include name="*.jar"/> 
        <include name="*.zip"/> 
       </fileset> 
      </classpath> 
     </javac> 
    </target> 

    <target name="pack" depends="jar" description="Create an archive use on EC2"> 
      <zip destfile="pokedex.zip"> 
      <zipfileset dir="." excludes="target/**,extra/**,**/*.class,pokedex.zip"/> 
      </zip> 
    </target> 

    <target name="clobber" description="remove jar"> 
     <delete file="${project.root}${file.separator}pokedex.jar"/> 
     <delete dir="${build.classes}${file.separator}"/> 
     <mkdir dir="${build.classes}${file.separator}"/> 
    </target> 

     <!--DOES NOT WORK --> 
     <target name="test" description="Run tests"> 
     <java failonerror="true" fork="true" classname="junit.textui.TestRunner"> 
      <classpath> 
      <pathelement location="${test.classes}"/> 
      <pathelement location="${build.classes.dir}"/> 
       <fileset dir="${lib.dir}"> 
        <include name="*.jar"/> 
       </fileset> 
      </classpath> 
      <arg value="RunAllTests"/> 
     </java> 
     </target> 

    <target name="test2"> 
     <junit> 
     <classpath> 
      <pathelement location="${build.classes.dir}"/> 
       <fileset dir="${lib.dir}"> 
        <include name="*.jar"/> 
       </fileset> 
       </classpath> 
     <batchtest> 
      <fileset dir="${project.root}"> 
       <include name="**/RunAllTests*" /> 
      </fileset> 
     </batchtest> 
     <formatter type="brief" usefile="false"/> 
     </junit> 
    </target> 

</project> 

MANIFEST.MF

Manifest-Version: 1.0 
Class-Path: 
+0

manifest.mfとbuild.xmlファイルのコードを教えてください。 – Nanashi

+0

'build.xml'で' javac'タスクを呼び出すときにソースレベルのバージョンを設定してみてください。 – Jesper

+0

必要なパッケージをインポートしましたか? – Kishore

答えて

6

は、AntはJavaがインストールされていると考えているあなたが表示されます

ant -diagnostics | grep java\\.home 

を試してみてください。 Eclipseで使用しているもの以外の場所から取得している可能性があります。もちろん、Eclipseでは、JDKツールが配置されているプロジェクトごとにユーザーが指定できるためです。また、単にビルドターゲットに次のようにエコーない理由を、あなたの実際のAntスクリプトでは、

など、基本的にJavaのバージョン情報などの情報が追加され、完全な診断出力を見るために ant -diagnosticsを実行することができます:

<echo message="Ant running on Java version ${ant.java.version}"/> 

Antを実行しているコンテナとアプリケーションをコンパイルするコンテナを区別する情報を提供します。

あなたは、ビルドターゲットにjavac指定にこれらの指定を追加することで、特定のJavaバージョンでコンパイルするアプリケーションを強制することができます。また

<javac debug="true" 
... 
source="1.7" 
target="1.7" 
... 
executable="<MY_JDK7_JAVA_HOME_DIR>/bin/javac" 
... > 
... 
</javac> 

、あなたが指定することで、冗長モードでのAntを実行することができます「 - v 'オプション、ala ant -v ...。この情報は、問題のデバッグとそれをうまく解決するためのガイドです。

関連する問題