2015-06-15 3 views
1

У меня есть муравейник для моего приложения Java. Я вынужден сделать свое приложение совместимым с Java 1.6.предупреждение во время компиляции javac от муравья

Когда я запускаю мой муравей сценарий, я получаю следующее предупреждение:

[javac] warning: [options] bootstrap class path not set in conjunction with -source 1.6 

Можете ли вы объяснить мне, что это значит и что мне нужно сделать, чтобы удалить его? Код работает отлично, но я собираюсь поставить его на производство, и я не люблю оставлять подобные предупреждения нерешенными.

Мой файл build.xml выглядит следующим образом:

<path id="master-classpath"> 
    <fileset dir="lib"> 
    <include name="*.jar"/> 
    </fileset> 
</path> 

<target name="compile" depends="clean"> 
    <javac srcdir="src" destdir="${bin-dir}" debug="on" source="1.6" includeantruntime="false"> 
      <classpath refid="master-classpath"/> 
    </javac> 
</target> 

<target name="clean"> 
    <mkdir dir="${bin-dir}"/> 
    <mkdir dir="${build-dir}"/> 

    <delete> 
     <fileset dir="${bin-dir}"/> 
     <fileset dir="${build-dir}"/> 
    </delete> 
</target> 

Ant версии: Ant(TM) version 1.8.2

Java Версия: javac 1.7.0_79

+0

Взгляните на системную среду. Может ли это быть несоответствием между JAVA_HOME и исполняемым Java-кодом (например, JAVA_HOME = 1.7, java = 1.8)? –

ответ

2

Это означает, что, хотя вы используете -source вариант, вы до сих пор JDK 1.7, поэтому javac не может гарантировать, что ваш код будет работать на Java 1.6. Javac проверит, не используете ли вы новые синтаксические функции (например, оператор try-with-resources), но он не может проверить, используете ли вы новые методы API (например, класс java.nio.file.Files). Поэтому, даже если он скомпилирован правильно, он может не работать.

На мой взгляд, лучшим решением является компиляция с JDK 1.6. Какое предупреждение указывает на то, что вы должны предоставить настраиваемый путь класса начальной загрузки, который указывает на установленный JRE 1.6. Поэтому вы можете следовать этому совету, если у вас есть JRE 1.6, но не хотите запускать всю сборку на JDK 1.6.

+0

Большое спасибо. Мой единственный комментарий к нему: когда у вас установлено несколько jdk на linux, имеет значение, где указывает команда «java» (javac, по-видимому, игнорируется ant-задачей), и его можно настроить с помощью: update-alternatives --config java – gawi

1

Это связано с javac. См https://blogs.oracle.com/darcy/entry/bootclasspath_older_source

Чтобы использовать JAVAC из JDK N для кросс-компилятора к более старой версии платформы , правильная практика заключается в следующем:

  • Используйте старые -source настройки.
  • Установите bootclasspath для компиляции с rt.jar (или эквивалентом) для старой платформы.
1

Это не имеет ничего общего с исходным кодом или сценарий ANT вы работаете, чтобы построить вам приложение.

Это имеет отношение к тому, как начинается ANT. Как вы заявили, вы используете Ant с использованием Java 1.7.0_79. Существуют значительные изменения API и библиотеки между Java 6 и Java 7. Чтобы избежать этих различий и устранить предупреждение, которое вы видите, вам нужно запустить ANT в среде Java 6.

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