Как скомпилировать этот код с помощью Java 10, Ant и компилятора Eclipse? - PullRequest
0 голосов
/ 04 июня 2018

Я пытаюсь скомпилировать этот простой код, используя 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 или я просто не понимаю параметры командной строки?

...