Плагин Maven AspectJ без весеннего проекта не будет работать - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть проект, который НЕ является весенним приложением.Я пытаюсь использовать аннотации 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>

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

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

[DEBUG] Цель: org.apache.maven.plugins: maven-clean-plugin: 2.5: clean (default-clean) [DEBUG] Стиль: обычный

[DEBUG] Цель: org.apache.maven.plugins:maven-compiler-plugin: 3.1: compile (default-compile) [DEBUG] Стиль: обычный

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

[DEBUG] Цель: org.apache.maven.plugins: maven-compiler-plugin: 3.1: testCompile (default-testCompile) [DEBUG] Стиль: обычный

[DEBUG] Цель: org.apache.maven.plugins: maven-surefire-plugin: 2.12.4: test (default-test) [DEBUG] Стиль: обычный

[DEBUG] Цель:org.apache.maven.plugins: maven-war-plugin: 2.4: war (default-war) [DEBUG] Стиль: Обычный

EDIT : после прочтения ответа Кригаэкса aЧто касается 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: компиляция (выполнение: по умолчанию, фаза: источники процессов)

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

1 Ответ

0 голосов
/ 19 декабря 2018

Я думаю, что это классическая проблема, не связанная с 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>

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

<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, поэтому вы должны настроить его самостоятельно, что вы и делаете.пытаюсь сделать.

...