Я пытаюсь скомпилировать этот простой код, используя Java 10, Ant и компилятор Eclipse:
import java.util.ArrayList;
import javax.xml.bind.JAXBException;
class Test {
void foo() throws JAXBException {
throw new JAXBException("hi there");
}
void bar() {
new ArrayList<String>();
}
}
Это файл Ant, который я использую:
<project name="Java 10 test">
<target name="compile-javac" depends="clean, print-version-info">
<javac release="10" includeantruntime="false">
<src path="."/>
<compilerarg value="--add-modules"/>
<compilerarg value="java.xml.bind"/>
</javac>
</target>
<target name="compile-ecj-4.7" depends="clean, print-version-info">
<javac compiler="org.eclipse.jdt.core.JDTCompilerAdapter"
release="10" includeantruntime="false">
<src path="."/>
<compilerclasspath>
<pathelement path="ecj-4.7.3a.jar"/>
</compilerclasspath>
<compilerarg value="--add-modules"/>
<compilerarg value="java.xml.bind"/>
</javac>
</target>
<target name="compile-ecj-4.8" depends="clean, print-version-info">
<javac compiler="org.eclipse.jdt.core.JDTCompilerAdapter"
release="10" includeantruntime="false">
<src path="."/>
<compilerclasspath>
<pathelement path="ecj-4.8RC2.jar"/>
</compilerclasspath>
<compilerarg value="--add-modules"/>
<compilerarg value="java.xml.bind"/>
</javac>
</target>
<target name="clean">
<delete file="Test.class"/>
</target>
<target name="print-version-info">
<echo message="Java home is ${java.home}"/>
<echo message="Java version is ${java.version}"/>
<echo message="Ant version is ${ant.version}"/>
</target>
</project>
Кодкомпилируется нормально, если я использую javac (цель compile-javac), но я не могу заставить его работать с компиляторами 4.7.3a или 4.8RC2 Eclipse:
- с 4.7.3a, яполучить ошибку параметризованные типы доступны только в том случае, если уровень источника составляет 1,5 или более , хотя я указываю
release="10"
- с 4.7.3a, если я использую
source="10" and target="10"
вместо release="10"
, ошибка уровня источника исчезает, но я получаю недопустимое имя модуля: javax.xml.bind ошибка - с 4.8RC2, я получаю ошибку уровня источника, и не может быть * JAXBExceptionразрешена ошибка типа , хотя я указываю, что хочу добавить модуль java.xml.bind, в котором определено исключение JAXBException.
Цель print-version-info дает следующеекак вывод:
print-version-info:
[echo] Java home is C:\Program Files\Java\jdk-10
[echo] Java version is 10
[echo] Ant version is Apache Ant(TM) version 1.10.3 compiled on March 24 2018
Может быть, это продолжение для ecj bug 487421 или я просто не понимаю параметры командной строки?