aspectj-maven-плагин и Java 7
Как я должен настроить пом.Итак, AspectJ-maven-plugin использует Java 7 для компиляции?
Когда я компилирую с моей текущей конфигурацией (см. Ниже), я всегда получаю сообщение с жалобой на мое использование какой-либо специфической функции Java 7, например
error: multi-catch statement is not supported in -source 1.5
Я использую eclipse, в свойствах проекта -> компилятор java он говорит 1.5 для уровня соответствия, источника, цели. Что я делаю не так?
Очень похожий вопрос был задан здесь , но решение не дает работайте на меня, я уже на версии 1.7.4 от org.в AspectJ.
Этот вопрос можно также перефразировать следующим образом:
Как я могу заставить maven скомпилировать мой код с помощью Java 7 и вплести аспекты?
Мне не нужно использовать AspectJ-maven-плагин. Но есть ли другой способ, который работает?
Пом.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>my.stuff</groupId>
<artifactId>artifact</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.7.4</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<version>1.5</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>test-compile</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
4 ответа:
Я нашел способ сделать это в этом вопросе. Проблема, по-видимому, заключается в том, что компиляторы java и aspectj вызываются не в том порядке, который можно было бы ожидать.
Короче говоря, добавление<phase>process-sources</phase>
сделало за меня работу:<executions> <execution> <phase>process-sources</phase> <goals> <goal>compile</goal> <goal>test-compile</goal> </goals> </execution> </executions>
Глядя на элементы конфигурации mojo , похоже, что у вас есть
source
иtarget
, настроенные так, как я ожидал. Вы пробовали установитьcomplianceLevel
на 1.7?Также-я только что прочитал вопрос, на который вы ссылались более внимательно. Ответ показывает, что существует блок
<dependencies>
внутри конфигурации плагина, которого нет в конфигурации выше. Если настройка complianceLevel не работает, удалите ее и добавьте вместо нее зависимость плагина.
Пожалуйста, убедитесь, что вы добавили элемент фазы, как показано ниже
<executions> <execution> <phase>process-sources</phase> <goals> <goal>compile</goal> <goal>test-compile</goal> </goals> </execution> </executions>
Хотя принятый ответ решает проблему, он может вызвать проблемы с другими плагинами на этапе процесс-исходники, поскольку компиляция может произойти слишком рано в жизненном цикле сборки.
Лучшим подходом было бы вообще отключить maven-compiler-plugin. Этого можно достичь, добавив в объявление maven-compiler-plugin следующее.
<executions> <execution> <id>default-compile</id> <phase>none</phase> </execution> </executions>
Это безопасно сделать, так как код компилируется aspectj-maven-plugin в любом случае.
В любом случае, если с помощью принятого ответ, следует также установить исходную / целевую версию java maven-compiler-plugin, если она не отключена