Java-сборки с разными версиями JDK: одни и те же артефакты? - PullRequest
1 голос
/ 15 апреля 2009

вот мой сценарий:

  • рабочая станция A: Sun JDK 1.6
  • рабочая станция B: Sun JDK 1.5

Я строю на A и B с Ant 1.7

<javac srcdir="${foo}" destdir="${bar}" source="1.5" target="1.5">
  <include name="**/*.java"/>
  <exclude name="**/test/**/*.java"/>
</javac>

но файлы .class имеют разный размер на A & B, не говоря уже о CRC. это должно быть так? или я что-то упускаю очевидное?

Ответы [ 2 ]

5 голосов
/ 15 апреля 2009

Хотя вы можете явно установить source="1.5" и target="1.5", это не определяет, какую версию JDK компилятора javac вы используете.

Итак, на рабочей станции с JAVA_HOME / PATH, указывающим на JDK 1.6, у вас есть файлы классов, построенные на 1.6 javac, которые должны быть совместимы с 1.5 JRE.

Однако source="1.5" и target="1.5" указывают только совместимость функций синтаксиса / языка; если вы полагаетесь на некоторые классы, доступные только в 1.6 JRE, то здесь вы не получите никакого предупреждения компилятора при использовании source="1.5" и target="1.5" на javac 1.6.

Чтобы решить эту последнюю проблему, вы должны указать в задании <javac> Ant использовать другой bootclasspath.

5 голосов
/ 15 апреля 2009

Да, так и должно быть. Даже при нацеливании на одну и ту же виртуальную машину разные компиляторы могут выдавать разный байтовый код. Пока получающаяся программа ведет себя правильно, JLS не предписывает точно, как исходный код компилируется в байтовый код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...