Могу ли я указать путь JDK для компиляции в Ant build.xml? - PullRequest
6 голосов
/ 13 февраля 2011

Я хотел бы использовать JDK 1.6 для ветки проекта, в то время как другие продолжают использовать JDK 1.5. Разработчики хотят иногда переключаться между ними.

Так что же лучший способ сказать javac Муравья , какой JDK использовать? Под лучшим я подразумеваю надежный, прозрачный, не требующий большого объема обслуживания, совместимый с исходным кодом (самого Ant и JDK, конечно, нет, но они живут в стандартных местах).


Очевидное - лучше, чем лучшее - я думаю, будет вне Ant : продолжайте изменять переменную JAVA_HOME env. Однако это потребует от разработчиков ручного переключения (еще одна вещь, которую нужно помнить: подвержена ошибкам), меняющего все серверы -many-build (больше работы для меня сейчас).

В поисках некоторого простого атрибута javac, например, jdk-path, я заметил несколько (вместо чтения в сети и в SO):

  • compiler - достаточно справедливо, но в документах говорится " modern: .. javac1.5 и javac1.6 .. как псевдонимы " .. Для меня это говорит о том, что это ничего не изменит - будет ли это?
  • source - похоже, относится только к версии JLS (хотя не% 100 очищено из документов, связанных выше)
  • target - версия байт-кода
  • bootclasspath - некоторые SO-ответы упоминают об этом, но довольно нечетко и кажутся хакерскими
  • executable - путь к javac, но не к библиотекам .. - кажется наиболее близким совпадением, неявно указывающим путь JDK? ОБНОВЛЕНИЕ: подтверждено JB Nizet
  • fork - похоже, мне здесь нужно истина (иначе он просто проигнорирует вышеупомянутое без ошибки?). ОБНОВЛЕНИЕ: Есть ли какие-либо последствия для производительности по сравнению с дефолтом? (Я полагаю, что времена запуска JVM лучше, но все же)

Итак, похоже, что ни одна из этих справок сама по себе не является ... является ли какая-либо комбинация этих эквивалентов настройкой JAVA_HOME перед запуском Ant?

Я имею в виду некоторые хаки (например, обертывание исполняемого файла ant на каждой платформе просто для установки этого env var - довольно печально), но я действительно надеюсь, что что-то пропустил:)

Ответы [ 2 ]

2 голосов
/ 13 февраля 2011

При использовании исполняемого атрибута необходимо установить для атрибута fork значение true.Это означает, что задача муравья javac запустит внешний процесс для выполнения javac.

Когда вы запускаете javac вручную, вам не нужно указывать какой-либо конкретный каталог lib JDK: он знает, где найти библиотеки JDK, частью которых он является.Я бы сказал, что это будет то же самое, если вы запустите его через задачу javac муравья (если вы не переопределите путь загрузки).

1 голос
/ 14 февраля 2011

Какая версия JDK используется для компиляции классов, не обязательно должна иметь значение.Могут быть различия в том, как конкретный JDK компилирует ресурсы, но если разница только между v1.5 и v1.6, вы можете скомпилировать код для совместимости с Java 1.5 (или даже 1.1), используя 1.6 JDK.

Вы можете контролировать, какую версию JVM компилировать для использования атрибута target:

<javac srcdir="${src}" 
       destdir="${build}" 
       fork="true" 
       source="1.5" 
       target="1.6" />  
...