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 4

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, если она не отключена