Плетение AspectJ из зависимости, не относящейся к проекту

У меня есть проект Java 8 Maven, который определяет пользовательскую аннотацию и аспект. При запуске тестового кода в самом проекте он применяет аспект к аннотированным классам. Затем я упаковываю и устанавливаю проект.

Затем я вношу эту зависимость в новый проект (не Spring). Тогда новый проект не имеет аспекта, примененного к его классам, хотя он вводит новую аннотацию.

Как мне иметь один JAR для определения аннотации и аспекта и применить его ко всем моим проектам с Maven?


person FiguringThisOut    schedule 22.05.2018    source источник
comment
Включено ли переплетение времени компиляции в процессе сборки вашего нового проекта? Или у вас включено переплетение во время загрузки при запуске нового проекта?   -  person Nándor Előd Fekete    schedule 22.05.2018
comment
@NándorElődFekete Я пытаюсь скомпилировать время, такое же, как и исходный проект, содержащий сам аспект. Этот проект прекрасно компилирует и выполняет аспекты. У меня есть тот же плагин сборки, настроенный для проекта, который добавляет аспект в качестве зависимости, но аспекты не применяются.   -  person FiguringThisOut    schedule 22.05.2018
comment
Конфигурация сборки не обязательно тривиальна, поэтому добавьте к своему вопросу соответствующую конфигурацию сборки.   -  person Nándor Előd Fekete    schedule 22.05.2018
comment
@NándorElődFekete Знаете ли вы какие-либо примеры, когда аспект, используемый для сборки, вводится в качестве зависимости? Я чувствую, что это распространенный вариант использования, я просто не смог найти инструкции или примеры того, как сплести аспект из зависимости.   -  person FiguringThisOut    schedule 22.05.2018
comment
Вот ответ, который я дал ранее на несвязанный вопрос, но он может быть полезен для вас, поскольку содержит пример того, как укажите библиотеки аспектов в сборке maven.   -  person Nándor Előd Fekete    schedule 22.05.2018
comment
@NándorElődFekete Большое спасибо! Конфигурация aspectLibraries была ответом. Если вы скопируете и вставите сюда информацию, на которую ссылаетесь, я отмечу ее как ответ. Спасибо за помощь.   -  person FiguringThisOut    schedule 22.05.2018


Ответы (1)


Вам необходимо указать зависимость вашего аспектного проекта как аспектную библиотеку в конфигурации вашего аспекта j-maven-plugin в файле pom.xml. Предположим, что ваш аспектный модуль имеет groupid:artifactid groupid:aspect-module. Ваш pom.xml должен выглядеть примерно так:

<dependencies>
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjrt</artifactId>
    </dependency>
    <dependency>
        <groupId>groupid</groupId>
        <artifactId>aspect-module</artifactId>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <executions>
                <execution>
                    <id>default-compile</id>
                    <phase>none</phase>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>aspectj-maven-plugin</artifactId>
            <version>1.9</version>
            <configuration>
                <aspectLibraries>
                    <aspectLibrary>
                        <groupId>groupid</groupId>
                        <artifactId>aspect-module</artifactId>
                    </aspectLibrary>
                </aspectLibraries>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>compile</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

Обратите внимание, что я отключаю maven-compiler-plugin, потому что они, как правило, перезаписывают вывод друг друга с помощью aspectj-maven-plugin, и компилятор AspectJ должен иметь возможность компилировать обычные java-файлы и в любом случае сплетать их на одном шаге, поэтому с помощью maven-compiler-plugin является избыточным. Если вы используете Eclipse + AJDT, эта конфигурация maven будет намного лучше отражать то, что происходит в вашей среде IDE во время разработки.

person Nándor Előd Fekete    schedule 23.05.2018