2015-02-21 2 views
2

Исходный код для проекта, над которым я работаю, управляется в eclipse, но файлы .class и .war, которые мы фактически используем и отправляем, построены с использованием ant через build.xml файл. Код работает в среде Spring и использует AspectJ для компиляции во времени. Мы работаем с AspectJ 1.6 и Java 1.6 в течение нескольких лет, но сейчас мы пытаемся перейти к использованию Java 1.8 (среда jboss, которую мы устанавливали внутри, использует Java 1.6, но перемещается до 1.8, плюс мы также работаем над тем, чтобы отделить наше приложение от другого приложения, чтобы мы могли работать автономно внутри контейнера причала, где мы предоставляем Java 1.8), но, похоже, проблема заключается в использовании AspectJ и Java 1.8. Я нашел несколько сообщений, которые, похоже, связаны с проблемой, которую мы видим, хотя я не нашел ни одного из них, чтобы предоставить простое решение, которое, похоже, соответствует нашей конкретной ситуации построения (те, которые имеют потенциальные решения вообще всегда ссылаются на нечто вроде maven или других вещей, которые мы не используем).с использованием iajc с java 1.8 JDK - Компаратор не может быть разрешен для типа

Вот вывод ошибки мы видим, при попытке скомпилировать с помощью Open JDK 8 из зулу (8u31 для Windows):

[iajc] C:\GitRepos\NSE_decouple\client\src\com\hp\nonstop\nse\test\cli\sort\PhysicalTargetListByName.java:5 [error] Comparator cannot be resolved to a type 
[iajc] public class PhysicalTargetListByName implements Comparator<String> 
[iajc]             ^^^^^^^^^ 
[iajc] C:\GitRepos\NSE_decouple\client\src\com\hp\nonstop\nse\test\cli\sort\PhysicalTargetListByName.java:5 [error] The type java.util.Comparator cannot be resolved. It is indirectly referenced from required .class files 
[iajc] public class PhysicalTargetListByName implements Comparator<String> 

Конкретного код в вопросе ссылается в этой ошибке (я подозреваю, другой код будет провал а также, но эта неудача, кажется, остановить компиляции) является:

public class PhysicalTargetListByName implements Comparator<String> 
{ 
<code not included; the declaration itself seems to be the failure point> 
} 

в случае проблема была связана с использованием aspectj1.6, я установил последнюю версию AspectJ, а также, что AspectJ 1.8.5, но это не имело никакого значения.

Вещи строят ОК внутри самого затмения, но мы получаем ошибки при попытке построить с помощью муравья, с установкой JAVA_HOME в «c: \ Program Files \ Zulu \ zulu-8» и IAJC_HOME, установленной в «c: \ aspectj1. 8 "перед выполнением команды" ant build "в командной строке. В файле build.xml, мы имеем следующий шаг внутри целевой сборки задачи для выполнения iajc компиляции:

<iajc destdir="${build.dir}" failonerror="true" 
    showWeaveInfo="${showWeaveInfo.isEnabled}" source="1.6" target="1.6" 
    debug="true" fork="true" maxmem="256m"> 
    <src path="${instsrc.dir}" /> 
    <exclude name="**/junit/*"/> 
    <exclude name="**/install/*"/> 
    <classpath refid="master-classpath"/> 
    <aspectPath refid="aspectPath"/> 
</iajc> 

Я также попытался это как с источником и целевым набором для «1,8», а также, но что не имеет никакого значения.

Файл build.xml также содержит:

<path id="aspectPath"> 
    <pathelement location="${lib.dir}/spring-aspects.jar"/> 
</path> 

и

<path id="master-classpath"> 
    <fileset dir="${lib.dir}"> 
     <include name="*.jar"/> 
    </fileset> 
    <fileset dir="${jetty.dir}/lib"> 
     <include name="servlet-api-3.0.jar"/> 
     <include name="jetty-servlet-8.1.16.v20140903.jar"/> 
     <include name="jetty-util-8.1.16.v20140903.jar"/> 
    </fileset> 
    <fileset dir="${jetty.dir}/lib/jsp"> 
     <include name="javax.servlet.jsp-2.2.0.v201112011158.jar"/> 
    </fileset> 
    <pathelement location="${clover.jar}"/> 
    <pathelement path="${build.dir}"/> 
</path> 

эксперимент, в котором я заменил iajc> задачу < с задачей в < Javac> вместо позволило построить работать без ошибка (хотя созданный код не был бы сплетен), поэтому кажется, что ошибка связана с смесью AspectJ с java 1.8 (другой эксперимент показывает, что мы можем построить без ошибки при использовании Open JDK 7 и AspectJ).

И помощь, указывающая на то, что нам может понадобиться, чтобы заставить AspectJ работать с сборками Java 1.8, будем очень благодарны!

ответ

1

После того, как выкарабкались, и немного уверенности, я наконец смог найти то, что хранит исправления. Я попытался решить эту проблему.

В моей папке %ANT_HOME%\lib возникла копия aspectjtools.jar. Этот JAR был размещен там много, много (много!) Лет назад. Вероятно, это версия AspectJ 1.6 JAR, и ее существование там помогло муравьям использовать эту версию, хотя наша сборка.xml-файл был изменен в какой-то момент, чтобы указать путь к AspectJ, поэтому существование JAR в ant lib не было необходимо для определения используемой версии (и недавно я изменил ее вместо AspectJ 1.8, хотя Присутствие файла сделало мое изменение на build.xml проигнорированным). Несмотря на то, что я думал, что теперь использую AJ 1.8 с Java 1.8, меня не было, поэтому все основные проблемы несовместимости между старыми AJ и Java 1.8 остались.

Как только я удалил этот JAR из папки ant lib, мои муравьиные сборки работали, как ожидалось, без ошибок!

Таким образом, было исправлено удаление файла, который не был необходим, но который не вызвал заметной проблемы до этого момента, поскольку мы использовали AJ 1.6 много лет назад. Обновление до более новой версии действительно не вступало в силу из-за существования бродячего файла. Нет файла ==> build.xml config вступает в силу ==> компиляция работает!

Смежные вопросы