Муравей пытается скомпилировать до 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
является.;-)