exec-maven-plugin的配置以与AOP的AspectJweaver一起使用javaagent

问题描述

使用Maven 3.6.3。

对于一个有关AspectJ和JUnit的简单Java应用程序,我具有以下依赖关系:

  <dependencies>
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjrt</artifactId>
        <version>${aspectj.version}</version>
    </dependency>
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjweaver</artifactId>
        <version>${aspectj.version}</version>
    </dependency>
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter</artifactId>
        <version>${junit.version}</version>
        <scope>test</scope>
    </dependency>
  </dependencies>

哪里

<aspectj.version>1.9.6</aspectj.version>
<junit.version>5.6.2</junit.version>

我有以下插件

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>${maven.surefire.plugin.version}</version>
        <configuration>
            <argLine>
                -javaagent:${settings.localRepository}/org/.../aspectjweaver-${aspectj.version}.jar
            </argLine>
            <useSystemClassLoader>true</useSystemClassLoader>
        </configuration>
    </plugin>

<maven.surefire.plugin.version>2.22.2</maven.surefire.plugin.version>

直到此处,AOP仅适用于测试,因此:

  • @Aspect@pointcut的配置正确,并且可以在运行时在Testing中正常运行
  • meta-inf/aop.xml的配置也很好

以防万一:

<aspectj>
    <aspects>
        <aspect name="com.manuel.jordan.aop.CalculatorAspect"/>
         <weaver options="-verbose -showweaveInfo">
            <include within="*"/>
        </weaver>
    </aspects>
</aspectj>

重点在于:对于Main执行,AOP不起作用,因为maven-surefire-plugin用于测试。因此,添加了以下插件

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>${exec.maven.plugin.version}</version>
    <configuration>
        <executable>java</executable>
        <mainClass>${main.class}</mainClass>
        <arguments>
            <argument>-javaagent:${settings.localRepository}/org/.../aspectjweaver-${aspectj.version}.jar</argument>
        </arguments>
    </configuration>
</plugin>

<exec.maven.plugin.version>3.0.0</exec.maven.plugin.version>

注意javaagent:${settings.localRepository}/org/.../aspectjweaver-${aspectj.version}.jar是两个插件的相同路径。请记住,对于第一个插件,它工作正常。所以路径是正确的。

Main类可以运行并和平执行,但问题是未应用AOP。因此,由于“测试”中的AOP有效,exec-maven-plugin中缺少的配置是什么?我读了许多 SO的帖子,并在共享的配置中闲逛,没事。

更新

如果我在终端中执行:

java -javaagent:pathtotheaspectjweaverjar.jar 
     -cp ./target/classes 
     com.manuel.jordan.Main

它工作正常,AOP正在按预期工作。

要做完一项研究后,必须先在-javaagent:pathtotheaspectjweaverjar.jar参数之前加上-cp参数。

当前问题场景:因此,通过Main类及其(String[] args)参数,我确认使用当前插件配置 {{1 }}参数的解释方式是一个简单的 Program参数

实际上如下:

-javaagent:pathtotheaspectjweaverjar.jar

那么,如何配置插件以实现与前一个命令执行相同的目标?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)