AspectJ, ткачество от зависимости не относится к проекту - PullRequest
0 голосов
/ 22 мая 2018

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

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

Как у меня есть один JAR-файл, чтобы определить аннотацию и аспект и применить его ко всем моимпроекты с Maven?

1 Ответ

0 голосов
/ 23 мая 2018

Вам необходимо указать зависимость вашего аспектного проекта в виде библиотеки аспектов в вашей конфигурации aspectj-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 во время разработки.

...