Я пытаюсь скомпилировать этот простой код с помощью 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), но я не могу заставить его работать с компиляторами Eclipse 4.7.3a или 4.8RC2:
release = "10"source = "10" and target = "10" вместо release = "10", ошибка исходного уровня исчезает, но я получаю ошибку недопустимое имя модуля: javax.xml.bindЦелевой объект 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 487421, или я просто не понимаю параметры командной строки?
Вы пробовали параметр "modulepath"? Та же ссылка
@Rainer: ты прав, я могу компилировать при добавлении --module-path = $ {java.home} / jmods, но только при использовании 4.8, а не 4.7.3a. Там я все еще получаю ошибку исходного уровня. Я не думаю, что добавление пути к модулю для JDK необходимо, думаю, я обнаружу ошибку с ребятами из JDT.
Это ошибка, которую я открыл: bugs.eclipse.org/bugs/show_bug.cgi?id=535552
Спасибо - было бы неплохо, если бы вы здесь прокомментировали результаты устранения ошибки в качестве ответа. Ваше здоровье




Довольно интересно, поскольку ANT заявляет, что игнорирует исходный и целевой атрибут версии> 1.9 и при выполнении на Java> = 9. ant.apache.org/manual/Tasks/javac.html