2013-04-16 13 views
7

Giusto per essere chiari, non si tratta di questa domanda: Ant is using wrong java versionAnt è sbagliato con il Java Compiler, ma pensa che sia giusto

Sto cercando di compilare un progetto Java 1.7 usando Ant su una macchina Mac OS 10.8.2 . Ho installato Java 1.7 ed Eclipse lo sta costruendo in modo ottimale. Tuttavia, quando si utilizza uno script di Ant con l'esecuzione della riga di comando di Ant in questo modo

ant -v 

l'uscita è misteriosa nella migliore delle ipotesi: Le prime linee rivelano che Ant sta usando Java 1.7 come richiesto, dalla posizione di $ JAVA_HOME, come mi sono impostato.

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 

Tuttavia, i seguenti errori del compilatore non hanno senso, perché rivelano un errore del compilatore che si verificherebbe solo in una versione precedente di 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]       ^

Questo è molto strano. Ho provato molte cose, inclusa la reinstallazione di Java JDK e la reinstallazione di Ant. Qualcuno là fuori ha qualche idea di ciò che potrebbe causare questo sconcertante problema?

se si tratta di alcun aiuto:

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 

Edit: Come richiesto dal commentatori, ho aggiunto il mio build.xml e file MANIFEST.MF sotto.

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

Potete per favore mostrarci un codice dei file manifest.mf e build.xml – Nanashi

+0

Provate ad impostare la versione del livello sorgente quando chiamate il task 'javac' nel' build.xml'. – Jesper

+0

Hai importato i pacchetti necessari? – Kishore

risposta

6

Prova

ant -diagnostics | grep java\\.home 

potrete vedere Ant pensa Java è installato. È possibile che lo ottenga da qualche parte oltre a quello che si sta utilizzando in Eclipse perché, naturalmente, Eclipse consente all'utente di specificare per ogni progetto dove si trova lo strumento JDK. È anche possibile eseguire ant -diagnostics per vedere l'uscita di diagnostica completa, che sarà essenzialmente aggiungere informazioni come Java informazioni sulla versione, ecc

Nello script Ant attuale, perché non eco il seguente nel target di generazione:

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

Fornirà informazioni per differenziare il contenitore in cui Ant è in esecuzione rispetto a quello in cui si desidera compilare l'applicazione.

È possibile forzare l'applicazione per la compilazione con una specifica versione di Java con l'aggiunta di questi specificatori alla javac specificatore nel target di generazione:

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

Inoltre, è possibile eseguire Ant in modalità dettagliata specificando l' '- v 'opzione, ala ant -v .... Queste informazioni dovrebbero guidare il debug del problema e, si spera, risolverlo.

Problemi correlati