Компиляция с помощью maven-compiler-plugin и maven-aspectj-plugin - PullRequest
0 голосов
/ 08 июля 2019

Когда я использую maven-apsectj-plugin и maven-compiler-plugin compile, фаза выполнит оба плагина compile goal. Это приводит к компиляции сначала с javac, а затем к полной перекомпиляции с ajc.

Нужна ли эта двойная компиляция? Кажется, я могу просто выключить maven-compiler-plugin и все работает отлично.

Я использую конфигурацию «по умолчанию», как указано в использовании maven-compiler-plugin:

<project>
  ...
  <dependencies>
    ...
    <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjrt</artifactId>
      <version>1.8.13</version>
    </dependency>
    ...
  </dependencies>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>aspectj-maven-plugin</artifactId>
        <version>1.11</version>
        <executions>
          <execution>
            <goals>
              <goal>compile</goal>       <!-- use this goal to weave all your main classes -->
              <goal>test-compile</goal>  <!-- use this goal to weave all your test classes -->
            </goals>
          </execution>
        </executions>
      </plugin>
      ...
    </plugins>
  <build>
  ...
</project>

1 Ответ

1 голос
/ 09 июля 2019

Да, вы можете деактивировать плагин Maven Compiler, потому что AspectJ-компилятор - это регулярно обновляемая ветвь Eclipse Java Compiler. Таким образом, это также может компилировать ваши файлы Java.

Но если ситуация более сложная, например, Вы используете Maven Compiler для компиляции Groovy-файлов или файлов в других модулях и хотите настроить его только один раз в <pluginManagement>, возможно, его деактивация не такая уж хорошая опция. Есть способ заставить оба плагина играть хорошо вместе, смотрите мои другие ответы

В основном вы настраиваете Maven Compiler для использования <useIncrementalCompilation>false</useIncrementalCompilation> и AspectJ Maven для использования <phase>process-sources</phase>. Больше информации в связанных ответах.

Тогда вы увидите вывод, подобный этому:

[INFO] --- aspectj-maven-plugin:1.12.1:compile (default) @ openbook_cleaner ---
[INFO] Showing AJC message detail for messages of types: [error, warning, fail]
[INFO] 
[INFO] --- aspectj-maven-plugin:1.12.1:test-compile (default) @ openbook_cleaner ---
[WARNING] No sources found skipping aspectJ compile
[INFO] 
[INFO] --- maven-compiler-plugin:3.3:compile (default-compile) @ openbook_cleaner ---
[INFO] Nothing to compile - all classes are up to date
...