Плагин Maven AspectJ без весеннего проекта не будет работать

У меня есть проект, который НЕ является весенним приложением. Я пытаюсь использовать в нем аннотации AspectJ. На классы аннотаций ссылаются из другой банки, которая у меня есть. Я упомянул мой раздел плагинов POM ниже. Моя сборка прошла успешно, но в консольном выводе Maven ничего не упоминается о плагине AspectJ, а также аннотации не работают, когда я запускаю свой проект.

Я пытался выяснить, что случилось в течение нескольких часов, но не могу понять это.

<pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>aspectj-maven-plugin</artifactId>
                <version>1.4</version>
                <configuration>
                    <complianceLevel>1.8</complianceLevel>
                    <showWeaveInfo>true</showWeaveInfo>
                    <aspectLibraries>
                        <aspectLibrary>
                            <groupId>it.cvc.ciscocommerce.lps.lp-commons</groupId>
                            <artifactId>lp-commons</artifactId>
                        </aspectLibrary>
                    </aspectLibraries>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
                <executions>
                    <execution>
                        <phase>process-sources</phase>
                        <goals>
                            <goal>compile</goal>
                        </goals>
                        <configuration>
                            <source>1.8</source>
                            <target>1.8</target>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.4</version>
                <configuration>
                    <warSourceDirectory>WebContent</warSourceDirectory>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                    <warName>listpriceservice</warName>
                </configuration>
            </plugin>
            <!-- Plugin for sdaas deployment. For compressing war to tar.gz -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.4</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <appendAssemblyId>false</appendAssemblyId>
                    <descriptors>
                        <descriptor>src/main/resources/assembly.xml</descriptor>
                    </descriptors>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>0.7.5.201505241946</version>
                <executions>
                    <execution>
                        <id>default-prepare-agent</id>
                        <goals>
                            <goal>prepare-agent</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>default-report</id>
                        <phase>prepare-package</phase>
                        <goals>
                            <goal>report</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>

    </pluginManagement>

Это две зависимости, определенные в Jar, которые я пытаюсь использовать в качестве библиотеки аспектов.

<dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjrt</artifactId>
        <version>1.7.4</version>
</dependency>
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjtools</artifactId>
        <version>1.7.4</version>
    </dependency>

Баночка скомпилирована нормально, и я могу использовать ее в другом приложении SPRING, но не в этом. В приложении SPRING у меня даже не определен плагин аспекта maven.

Когда я запускаю сборку maven, в консоли я вижу только следующие перечисленные плагины.

[ОТЛАДКА] Цель: org.apache.maven.plugins:maven-clean-plugin:2.5:clean (по умолчанию-чистый) [ОТЛАДКА] Стиль: Обычный

[ОТЛАДКА] Цель: org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (компиляция по умолчанию) [ОТЛАДКА] Стиль: Обычный

[ОТЛАДКА] Цель: org.apache.maven.plugins:maven-resources-plugin:2.6:testResources (по умолчанию-testResources) [ОТЛАДКА] Стиль: Обычный

[ОТЛАДКА] Цель: org.apache.maven.plugins:maven-compiler-plugin:3.1:testCompile (default-testCompile) [ОТЛАДКА] Стиль: Обычный

[ОТЛАДКА] Цель: org.apache.maven.plugins:maven-surefire-plugin:2.12.4:test (тест по умолчанию) [ОТЛАДКА] Стиль: Обычный

[ОТЛАДКА] Цель: org.apache.maven.plugins:maven-war-plugin:2.4:war (по умолчанию-война) [ОТЛАДКА] Стиль: Обычный

EDIT: прочитав ответ kriegaex и информацию о pluginManagement vs plugins, я изменил свой POM, как показано ниже. Обратите внимание, что мой проект не является многомодульным, он имеет только один POM.

<plugins>
        <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>aspectj-maven-plugin</artifactId>
                <version>1.4</version>
                <configuration>
                    <complianceLevel>1.8</complianceLevel>
                    <showWeaveInfo>true</showWeaveInfo>
                    <aspectLibraries>
                        <aspectLibrary>
                            <groupId>it.cvc.ciscocommerce.lps.lp-commons</groupId>
                            <artifactId>lp-commons</artifactId>
                        </aspectLibrary>
                    </aspectLibraries>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
                <executions>
                    <execution>
                        <phase>process-sources</phase>
                        <goals>
                            <goal>compile</goal>
                        </goals>
                        <configuration>
                            <source>1.8</source>
                            <target>1.8</target>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.4</version>
            <configuration>
                <warSourceDirectory>WebContent</warSourceDirectory>
                <failOnMissingWebXml>false</failOnMissingWebXml>
                <warName>listpriceservice</warName>
            </configuration>
        </plugin>
        <!-- Plugin for sdaas deployment. For compressing war to tar.gz -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>2.4</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <appendAssemblyId>false</appendAssemblyId>
                <descriptors>
                    <descriptor>src/main/resources/assembly.xml</descriptor>
                </descriptors>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
            <version>0.7.5.201505241946</version>
            <executions>
                <execution>
                    <id>default-prepare-agent</id>
                    <goals>
                        <goal>prepare-agent</goal>
                    </goals>
                </execution>
                <execution>
                    <id>default-report</id>
                    <phase>prepare-package</phase>
                    <goals>
                        <goal>report</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>

Когда я это делаю, я получаю следующую ошибку в теге выполнения при выполнении AspectJ

Выполнение плагина не охвачено конфигурацией жизненного цикла: org.codehaus.mojo:aspectj-maven-plugin:1.4:compile (выполнение: по умолчанию, фаза: исходники процесса)

ОБНОВЛЕНИЕ Я помечаю этот вопрос как ответ, поскольку моя первоначальная проблема с неиспользуемым плагином AspectJ решена. Я открою новый вопрос по моей другой проблеме. Спасибо kriegaex за то, что указал мне правильное направление.


person Arnav Sengupta    schedule 19.12.2018    source источник


Ответы (1)


Я думаю, что это классика и вообще не проблема AspectJ, а ошибка новичков с использованием Maven:

Вы определили настройки своих плагинов по умолчанию в разделе <pluginManagement>, но забыли сослаться на них позже в отдельном разделе <plugins>. Таким образом, Maven понятия не имеет, что вы вообще хотите их использовать.


Обновление:

Хорошо, я уточню немного больше, поскольку у вас все еще есть проблемы с пониманием того, как использовать <pluginManagement> против <plugins>: вы используете первое, чтобы определить версию, область действия и настройки по умолчанию для ваших плагинов. Затем вы используете последний, чтобы просто ссылаться на предопределенный (управляемый) плагин в любом модуле вашего (возможно, многомодульного) проекта, который вам нужен, без копирования/вставки той же версии и конфигурации. Так что это не «использовать то или это», а «использовать то и другое и разумно комбинировать их». Пример:

<pluginManagement>
    <plugins>
        <plugin>
            <groupId>my.group.id</groupId>
            <artifactId>my-plugin-name</artifactId>
            <version>1.2.3</version>
            <configuration>
                <something>foo</something>
            </configuration>
        </plugin>
        <plugin>
            <groupId>my.group.id</groupId>
            <artifactId>my-other-plugin-name</artifactId>
            <version>4.5</version>
            <scope>test</scope>
            <configuration>
                <blah>xyz</blah>
            </configuration>
        </plugin>
    </plugins>
</pluginManagement>

А затем позже в том же модуле или в другом модуле, имеющем первый в качестве родителя или импортирующем его как спецификацию (ведомость материалов):

<plugins>
    <plugin>
        <groupId>my.group.id</groupId>
        <artifactId>my-plugin-name</artifactId>
    </plugin>
    <plugin>
        <groupId>my.group.id</groupId>
        <artifactId>my-other-plugin-name</artifactId>
    </plugin>
</plugins>

Видеть? очень чисто и просто.

Между прочим, это похоже на разницу между <dependencyManagement> и <dependencies>.

Вы также можете расширить или переопределить конфигурацию управляемого плагина в разделе <plugins>, чтобы не ограничиваться тем, что было предварительно настроено.

Что касается того, почему некоторые управляемые плагины работали без вашего явного упоминания о них в разделе <plugins>: они были настроены либо в вашем родительском POM, либо в корневом POM Maven, например, плагин зависимостей, плагин компиляции и другие предопределенные и предварительно настроенные базовые плагины Maven. Если вы заставите Maven отображать эффективный POM для вашего модуля, вы их увидите.

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

person kriegaex    schedule 19.12.2018
comment
‹Плагины› определяются в ‹Управлении плагинами›. Все остальные плагины работают. Строит нормально. Не понял, что вы имеете в виду. - person Arnav Sengupta; 19.12.2018
comment
Итак, я немного погуглил и понял, в чем разница между «плагинами» и «управлением плагинами». Поэтому, когда я держу все только под «плагинами», плагин аспекта жалуется под тегом «исполнение». Поэтому я сохранил только плагин aspectj теперь в разделе «Управление плагинами» и внутри этих «плагинов» и переместил все остальное под отдельный тег «плагины», а также добавил плагин maven-dependency-plugin. Даже сейчас он отлично строится, но AspectJ не работает. - person Arnav Sengupta; 19.12.2018
comment
Смотрите мое обновление, чтобы узнать, как правильно сочетать управление и использование плагинов Maven. Документация Maven объясняет это более подробно, но это иногда сложно понять новичкам, поэтому я не упомянул здесь некоторые детали. Что касается вашего вопроса о том, почему AspectJ не работает, как вы сказали, это предложение вряд ли можно считать воспроизводимым описанием ошибки. Кажется, вы используете аспектный модуль в другом модуле, поэтому здесь у вас многомодульная установка. Источников ошибок может быть много. Пожалуйста, опубликуйте MCVE для меня на GitHub, чтобы я мог вам помочь. - person kriegaex; 20.12.2018