2014-01-05 5 views
3

Как мне настроить pom.xml, чтобы аспектный-maven-плагин использовал Java 7 для компиляции?aspectj-maven-plugin и Java 7

Когда я скомпилирован с моей текущей конфигурацией (см. Ниже), я всегда получаю сообщение, жалующееся на мое использование некоторой специфической функции Java 7, например.

error: multi-catch statement is not supported in -source 1.5 

Я использую затмение, в свойствах проекта -> Java компилятор это говорит +1,5 за уровень соответствия, источник, цель. Что я делаю не так?

Очень похожий вопрос был задан here, но решение не работает для меня, я уже на версии 1.7.4 org.aspectj.

также вопрос можно перефразировать:

Как я могу сделать Maven скомпилировать мой код, используя Java 7 и плести аспекты в?

Мне не нужно использовать плагин aspectj-maven. Но какой другой способ работает?

pom.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> 

ответ

2

Я нашел способ сделать это в this question. Проблема заключается в том, что компиляторы java и aspectj не вызываются в том порядке, который можно было бы ожидать.

Короче, добавив <phase>process-sources</phase> сделал работу для меня:

<executions> 
<execution> 
    <phase>process-sources</phase> 
    <goals> 
    <goal>compile</goal> 
    <goal>test-compile</goal> 
    </goals> 
</execution> 
</executions> 
+0

Хотя это решение работает - я бы рекомендовал использовать другой подход в будущем, который не будет перемещать компиляцию на фазу процессов-источников. Это может быть причиной проблем с другими плагинами, привязанными к этой фазе. Я добавляю ответ с моим решением – dagandlerx

0

Глядя на mojo configuration elements это выглядит, как у вас есть source и target настроен как я ожидал. Вы пробовали установить complianceLevel на 1.7?

Кроме того - я просто прочитал вопрос, на который вы ссылались более подробно. Ответ показывает, что есть <dependencies> блок внутри конфигурация плагина, которой нет в конфигурации выше. Если параметр complianceLevel не работает, удалите его и вместо этого добавьте зависимость плагина.

+0

да я пытался это тоже. На самом деле я только что придумал решение, я отправлю его ниже. – hansi

+0

тоже пробовал это, и это не помогло – hansi

0

Пожалуйста, убедитесь, что вы добавляете междуфазную ниже

   <executions> 
       <execution> 
        <phase>process-sources</phase> 
        <goals> 
         <goal>compile</goal> 
         <goal>test-compile</goal> 
        </goals> 
       </execution> 
      </executions> 
0

Хотя принятый ответ решает эту проблему, это может вызвать проблемы с другими плагинами в фазе источников процессов, поскольку компиляция может произойти слишком рано в жизненном цикле сборки.

Лучшим подходом было бы отключить maven-compiler-plugin вообще. Этого можно достичь, добавив следующее в объявление maven-compiler-plugin.

<executions> 
    <execution> 
     <id>default-compile</id> 
     <phase>none</phase> 
    </execution> 
</executions> 

В любом случае, это безопасно, поскольку код скомпилирован в виде aspectj-maven-plugin.

В любом случае, если используется принятый ответ, следует также установить источник/целевой версии Java из Maven-компилятора-плагин, если он не отключен