2013-04-16 2 views
7

Просто чтобы быть ясно, что это не этот вопрос: Ant is using wrong java versionAnt использует неправильный Java компилятор, но считает, что это правильно

Я пытаюсь скомпилировать проект Java 1.7 с помощью Ant на Mac OS 10.8.2 машины , У меня установлена ​​Java 1.7, и Eclipse строит ее плавно. Однако, при использовании муравей сценарий сборки с выполнением командной строки АНТ как так

ant -v 

выход таинственна в лучшем случае: Первые строки показывают, что Ant использует Java 1.7 в соответствии с просьбой, от места $ ПАПКА_УСТАНОВКИ_JAVA, как я настраивал себя.

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 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 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 

Edit: В соответствии с просьбой комментаторами, я добавил свой 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

Попробуйте установить версию исходного уровня при вызове задачи 'javac' в' 'build.xml'. – Jesper

+0

Вы импортировали необходимые пакеты? – Kishore

ответ

6

Попробуйте

ant -diagnostics | grep java\\.home 

Вы увидите, где Ant думает установлена ​​Java. Возможно, что это происходит откуда-то помимо того, что вы используете в Eclipse, потому что, конечно же, Eclipse позволяет пользователю указывать на основе каждого проекта, где находится инструментарий JDK. Вы также можете просто запустить ant -diagnostics, чтобы увидеть полный диагностический вывод, который будет в основном добавить информацию как информацию о версии Java и т.д.

В вашей реальной Ant скрипт, почему бы не повторить следующее цель сборки:

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

Это предоставит информацию, чтобы различать контейнер, в котором работает Ant, в сравнении с тем, который вы хотите скомпилировать.

Вы можете заставить приложение компилировать с конкретной версией Java, добавляя эти спецификатор к javac спецификатору в мишени для сборки:

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

Кроме того, вы можете запустить Ant в расширенном режиме, указав «- v ', ala ant -v .... Эта информация должна помочь отладить проблему и, надеюсь, ее решить.

Смежные вопросы