Муравей пытается скомпилировать до 1.6, когда цель установлена ​​на 1.5

Я борюсь с проблемой задачи Javac Ant уже очень давно. Проблема в том, что, очевидно, муравей игнорирует целевой атрибут, который установлен на 1,5:

    <target name="compile" description="Kompilacja zrodel" depends="init">
    <javac target="${compile.targetvm}" source="${compile.sourcecompatibility}" debug="${compile.debug}" optimize="${compile.optimize}" verbose="${compile.verbose}" srcdir="${source.dir}" destdir="${build.classes.dir}" encoding="${compile.source.encoding}" includeantruntime="false">
        <classpath refid="compile.classpath" />
    </javac>
</target>

Цель и источник установлены на 1,5. Когда я запускаю задачу, у меня появляется ошибка компиляции:

foo.Bar is not abstract and does not override abstract method createStruct(java.lang.String,java.lang.Object[]) in java.sql.Connection

Согласно java docs ( ссылка) метод createStruct был введен в java 1.6, так что я знаю, что ant компилирует до 1.6, а не до 1.5, как я вежливо просил его сделать.

Я выполнял задачу из затмения и из командной строки с тем же результатом, так что это не проблема затмения. Я пытался изменить JRE в ANT и использовать разные версии ANT, и ничего не помогло.

Я перепробовал все, что мог найти в Интернете, и теперь я сдаюсь. Может ли кто-нибудь помочь мне? Довольно пожалуйста..

1 ответ

Указание совместимости источника контролирует только синтаксис языка, а не библиотеку времени выполнения Java.

Поскольку вы не сказали Ant, где найти библиотеку времени выполнения Java 1.5, она использует ту же библиотеку, которая использовалась для вызова Ant.

Чтобы исправить, укажите bootclasspathref="compile.bootclasspath" атрибут тоже.

compile.bootclasspath определяется так:

<path id="compile.bootclasspath">
    <fileset dir="${java15.home}/jre/lib" includes="*.jar"/>
</path>

Должно быть очевидно, что java15.home является.;-)

Другие вопросы по тегам