ПРИМЕЧАНИЕ. Похоже, что это ограничение в программе "javac".
У меня есть код Java 6, который необходимо создать для Java 5 JVM.Моя предыдущая работа с целевым объектом javac ant (как с JDK-компилятором, так и с ecj) привела меня к мысли, что это просто вопрос установки источника и цели для javac.Отсюда этот фрагмент pom.xml:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.6</source>
<target>1.5</target>
</configuration>
</plugin>
, который работает, как и ожидалось, в Eclipse 3.7 с поддержкой Maven.К сожалению, запуск Maven непосредственно из командной строки дает мне
javac: source release 1.6 requires target release 1.6
, что сгенерировано javac -source 1.6 -target 1.5
.Для пояснения, это официальный OpenJDK 6 для Ubuntu
x@JENKINS:~$ javac -version
javac 1.6.0_20
x@JENKINS:~$ javac -source 1.6 -target 1.5
javac: source release 1.6 requires target release 1.6
x@JENKINS:~$
Официальный Oracle Java 7 JDK для Windows демонстрирует то же поведение.
Примечание: я не хочу строить на Java 5библиотеки или что-нибудь.Только то, что активный javac генерирует Java 5 совместимый байт-код.
Как получить то, что я хочу, оставаясь совместимым с плагином Eclipse Maven?
(РЕДАКТИРОВАТЬ: В дополнение к @Override я также хочу скомпилировать библиотеки JAX-WS в Java 6, когда они используются, но все еще генерирует 5-байтовый код Java - тогда я могу добавлять библиотеки JAX-WS преднамереннов веб-контейнере при развертывании на установку Java 5)
РЕДАКТИРОВАТЬ: получается, что maven-compiler-plugin может быть сказано использовать другой компилятор, и компилятор Eclipse может сделать это:
<plugin>
<!-- Using the eclipse compiler allows for different source and target,
which is a good thing (outweighing that this is a rarely used combination,
and most people use javac) This should also allow us to run maven builds
on a JRE and not a JDK. -->
<!-- Note that initial experiments with an earlier version of maven-compiler-plugin
showed that the eclipse compiler bundled with that gave incorrect lines in
the debug information. By using a newer version of the plexus-compiler-eclipse
plugin this is hopefully less of an issue. If not we must also bundle a newer
version of the eclipse compiler itself. -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.0</version>
<configuration>
<source>1.6</source>
<target>1.5</target>
<debug>true</debug>
<optimize>false</optimize>
<fork>true</fork>
<compilerId>eclipse</compilerId>
</configuration>
<dependencies>
<dependency>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-compiler-eclipse</artifactId>
<version>2.1</version>
</dependency>
</dependencies>
</plugin>
, который без жалоб компилирует класс в байт-код Java 1.5.Это также поддерживается "из коробки" для m2e для Eclipse Java EE 4.2.2.
РЕДАКТИРОВАТЬ: я обнаружил, что из всех вещей инструмент javadoc не любит вывод из компилятора Eclipse.
РЕДАКТИРОВАТЬ 2015-06-28: Недавно я провел быстрое тестирование, и последний ecj (соответствующий Eclipse 4.4) хорошо работал с javadoc.