2017-04-06 65 views
1

我试图用Aspectj做AOP,但我不知道为什么不执行我的方面,它只是运行主类。这是我第一次这样做,所以我可能会做错事。AspectJ的建议不会在Maven多模块设置中触发

这是我的代码:

的看点:

@Aspect 
public class YourAspect { 

    @Pointcut("@annotation(yourAnnotationVariableName)") 
    public void annotationPointCutDefinition(YourAnnotation yourAnnotationVariableName){ 
    } 

    @Pointcut("execution(* *(..))") 
    public void atExecution(){} 

    @Around("annotationPointCutDefinition(yourAnnotationVariableName) && atExecution()") 
    public Object aroundAdvice(ProceedingJoinPoint joinPoint, YourAnnotation yourAnnotationVariableName) throws Throwable { 
     if(yourAnnotationVariableName.isRun()) { 
      Object returnObject = null; 

      try { 
       System.out.println("aspects.YourAspect's aroundAdvice's body is now executed Before yourMethodAround is called."); 
       returnObject = joinPoint.proceed(); 
      } catch (Throwable throwable) { 
       throw throwable; 
      } finally { 
       System.out.println("aspects.YourAspect's aroundAdvice's body is now executed After yourMethodAround is called."); 
      } 
      return returnObject; 
     } 
     return joinPoint.proceed(); 
    } 

    @After("annotationPointCutDefinition(yourAnnotationVariableName) && atExecution()") 
    public void printNewLine(JoinPoint pointcut, YourAnnotation yourAnnotationVariableName){ 
     System.out.print("End\n\r"); 
    } 
} 

注释:

@Retention(RetentionPolicy.RUNTIME) 
@Target(ElementType.METHOD) 
public @interface YourAnnotation { 
    public boolean isRun() default true; 
} 

主类:

public class MainClass{ 
    public static void main(String[] args) { 
     MainClass yourClass = new MainClass(); 
     yourClass.yourMethodAround(); 
    } 

    @YourAnnotation 
    public void yourMethodAround(){ 
     System.out.println("Executing TestTarget.yourMethodAround()"); 
    } 
} 

我有两个工作模块和POMs厕所KS这样的:

Aspect的POM:

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

     <groupId>Group</groupId> 
     <artifactId>Aspects</artifactId> 
     <version>1.0-SNAPSHOT</version> 

     <build> 
      <plugins> 
       <plugin> 
        <groupId>org.codehaus.mojo</groupId> 
        <artifactId>aspectj-maven-plugin</artifactId> 
       </plugin> 
       <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-compiler-plugin</artifactId> 
       </plugin> 
      </plugins> 
     </build> 

     <dependencies> 
      <dependency> 
       <groupId>org.aspectj</groupId> 
       <artifactId>aspectjweaver</artifactId> 
       <version>1.8.10</version> 
      </dependency> 
     </dependencies> 

    </project> 

主要POM:

<?xml version="1.0" encoding="UTF-8"?> 
    <project xmlns="http://maven.apache.org/POM/4.0.0" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
     <modelVersion>4.0.0</modelVersion> 
    <groupId>Group</groupId> 
    <artifactId>Main</artifactId> 
    <version>1.0-SNAPSHOT</version> 

    <build> 
     <pluginManagement> 
      <plugins> 
       <plugin> 
        <groupId>org.codehaus.mojo</groupId> 
        <artifactId>aspectj-maven-plugin</artifactId> 
        <version>1.7</version> 
        <configuration> 
         <complianceLevel>1.8</complianceLevel> 
         <source>1.8</source> 
         <target>1.8</target> 
         <aspectLibraries> 
          <aspectLibrary> 
           <groupId>Group</groupId> 
           <artifactId>Aspects</artifactId> 
          </aspectLibrary> 
         </aspectLibraries> 
        </configuration> 
        <executions> 
         <execution> 
          <goals> 
           <goal>compile</goal> 
           <goal>test-compile</goal> 
          </goals> 
         </execution> 
        </executions> 
       </plugin> 
       <plugin> 
        <artifactId>maven-assembly-plugin</artifactId> 
        <version>2.5.5</version> 
        <configuration> 
         <appendAssemblyId>false</appendAssemblyId> 
         <descriptorRefs> 
          <descriptorRef>jar-with-dependencies</descriptorRef> 
         </descriptorRefs> 
         <archive> 
          <manifest> 
           <mainClass>aspects.MainClass</mainClass> 
          </manifest> 
         </archive> 
        </configuration> 
        <executions> 
         <execution> 
          <id>a-make-assembly</id> 
          <phase>package</phase> 
          <goals> 
           <goal>single</goal> 
          </goals> 
         </execution> 
        </executions> 
       </plugin> 
      </plugins> 
     </pluginManagement> 
     <plugins> 
      <plugin> 
       <groupId>org.codehaus.mojo</groupId> 
       <artifactId>exec-maven-plugin</artifactId> 
       <version>1.2.1</version> 
       <configuration> 
        <mainClass>aspects.MainClass</mainClass> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 

    <dependencies> 
     <dependency> 
      <groupId>Group</groupId> 
      <artifactId>Aspects</artifactId> 
      <version>1.0-SNAPSHOT</version> 
     </dependency> 
    </dependencies> 
</project> 

我MVN全新安装了这两个项目,然后MVN高管:Java中的主要项目,它只是运行该方法,而不是方面。谁能帮我?

谢谢!

+0

你是否真的在切入点中使用'yourAnnotationVariableName'?它应该有注释类型作为它的参数https://blog.jayway.com/2015/09/08/defining-pointcuts-by-annotations/ –

+0

我跟着那个网页。在我的切入点中使用yourAnnotationVariableName意味着什么?你能解释一下吗? – Motomine

+0

有关Maven多模块项目的一般问题和错误假设以及如何使用AspectJ Maven插件。例如,aspect模块不会配置任何插件版本,也不会将主模块用作父级模块。即使它确实如此,它也意味着一个循环引用,因为如果aspect模块依赖于main和main将方面作为依赖关系,那么就无法编译。我建议你创建一个共同的家长,然后创建一个具有正确配置的应用程序和一个方面模块(我可以帮你解决这个问题)。 – kriegaex

回答

0

好的,你走吧。我没有将不同项目/包中的内容分开,以尽可能简单。

项目的pom.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>Group</groupId> 
    <artifactId>Main</artifactId> 
    <version>1.0-SNAPSHOT</version> 

    <dependencies> 
     <dependency> 
      <groupId>org.aspectj</groupId> 
      <artifactId>aspectjweaver</artifactId> 
      <version>1.8.10</version> 
     </dependency> 
    </dependencies> 

    <build> 
     <plugins> 

      <plugin> 
       <groupId>org.codehaus.mojo</groupId> 
       <artifactId>aspectj-maven-plugin</artifactId> 
       <version>1.7</version> 
       <configuration> 
        <complianceLevel>1.8</complianceLevel> 
        <source>1.8</source> 
        <target>1.8</target> 
       </configuration> 
       <executions> 
        <execution> 
         <goals> 
          <goal>compile</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 

      <plugin> 
       <artifactId>maven-assembly-plugin</artifactId> 
       <configuration> 
        <archive> 
         <manifest> 
          <addClasspath>true</addClasspath> 
          <mainClass>yourpackage.AspectJRawTest</mainClass> 
         </manifest> 
        </archive> 
        <descriptorRefs> 
         <descriptorRef>jar-with-dependencies</descriptorRef> 
        </descriptorRefs> 
       </configuration> 
       <executions> 
        <execution> 
         <phase>package</phase> 
         <goals> 
          <goal>single</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 

     </plugins> 

    </build> 
</project> 

注释(你正确地写了这一个):这将运行注释方法前

package yourpackage; 

import java.lang.annotation.ElementType; 
import java.lang.annotation.Retention; 
import java.lang.annotation.RetentionPolicy; 
import java.lang.annotation.Target; 

@Retention(RetentionPolicy.RUNTIME) 
@Target(ElementType.METHOD) 
public @interface MyCustomAnnotation { 
    public boolean isRun() default true; 
} 

定制的建议。我不知道这一个,术语不完全清楚,我...但它似乎工作:)

package yourpackage; 

import org.aspectj.lang.JoinPoint; 
import org.aspectj.lang.annotation.Aspect; 
import org.aspectj.lang.annotation.Before; 

@Aspect 
public class MyCustomAspect { 
    @Before("execution(* *.*(..)) && @annotation(MyCustomAnnotation)") 
    public void advice(JoinPoint joinPoint) { 
     System.out.printf("BINGO! advice() called before '%s'%n", joinPoint); 
    } 
} 

最后,主类:

package yourpackage; 

public class AspectJRawTest { 

    public static void main(String[] args) { 
     System.out.println("custom annotation playground"); 

     ISomething something = new SomethingImpl(); 

     something.annotatedMethod(); 
     something.notAnnotatedMethod(); 
    } 

} 

interface ISomething { 
    void annotatedMethod(); 

    void notAnnotatedMethod(); 
} 

class SomethingImpl implements ISomething { 
    @MyCustomAnnotation 
    public void annotatedMethod() { 
     System.out.println("I am annotated and something must be printed by an advice above."); 
    } 

    public void notAnnotatedMethod() { 
     System.out.println("I am not annotated and I will not get any special treatment."); 
    } 
} 

我与Maven构建它像这样:mvn clean compile assembly:single创建一个包含依赖关系的可执行jar。然后,执行:

java -jar target/Main-1.0-SNAPSHOT-jar-with-dependencies.jar 
custom annotation playground 
BINGO! advice() called before 'execution(void yourpackage.SomethingImpl.annotatedMethod())' 
I am annotated and something must be printed by an advice above. 
I am not annotated and I will not get any special treatment. 

我会稍后的地方上传一个完整的项目,为您提供a link,但我已经发布应该是足够的。

我已经在IDEA中测试过了,我无法配置它为我做适当的编织(命名任何其他IDE,您将得到相同的问题)。但我现在没时间了,你必须自己处理这个任务。好消息,这一定是可能的,因为所有事情都可以在裸机上运行。

1

这是一个多模块解决方案。

主要POM(母公司为所有其他人):

这里我们定义了所有插件与基本配置(更具体的配置可以在“应用程序”模块中)和管理所有的依赖版本。

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>de.scrum-master.stackoverflow</groupId> 
    <artifactId>main</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <packaging>pom</packaging> 

    <properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    <java.source-target.version>1.8</java.source-target.version> 
    <aspectj.version>1.8.10</aspectj.version> 
    </properties> 

    <build> 
    <pluginManagement> 
     <plugins> 

     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>3.6.1</version> 
      <configuration> 
      <source>${java.source-target.version}</source> 
      <target>${java.source-target.version}</target> 
      <!-- IMPORTANT --> 
      <useIncrementalCompilation>false</useIncrementalCompilation> 
      </configuration> 
     </plugin> 

     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>aspectj-maven-plugin</artifactId> 
      <version>1.10</version> 
      <configuration> 
      <!--<showWeaveInfo>true</showWeaveInfo> --> 
      <source>${java.source-target.version}</source> 
      <target>${java.source-target.version}</target> 
      <Xlint>ignore</Xlint> 
      <complianceLevel>${java.source-target.version}</complianceLevel> 
      <encoding>${project.build.sourceEncoding}</encoding> 
      <!--<verbose>true</verbose> --> 
      <!--<warn>constructorName,packageDefaultMethod,deprecation,maskedCatchBlocks,unusedLocals,unusedArguments,unusedImport</warn> --> 
      </configuration> 
      <executions> 
      <execution> 
       <!-- IMPORTANT --> 
       <phase>process-sources</phase> 
       <goals> 
       <goal>compile</goal> 
       <goal>test-compile</goal> 
       </goals> 
      </execution> 
      </executions> 
      <dependencies> 
      <dependency> 
       <groupId>org.aspectj</groupId> 
       <artifactId>aspectjtools</artifactId> 
       <version>${aspectj.version}</version> 
      </dependency> 
      <dependency> 
       <groupId>org.aspectj</groupId> 
       <artifactId>aspectjweaver</artifactId> 
       <version>${aspectj.version}</version> 
      </dependency> 
      </dependencies> 
     </plugin> 

     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <version>2.5.5</version> 
      <configuration> 
      <appendAssemblyId>false</appendAssemblyId> 
      <descriptorRefs> 
       <descriptorRef>jar-with-dependencies</descriptorRef> 
      </descriptorRefs> 
      </configuration> 
      <executions> 
      <execution> 
       <id>a-make-assembly</id> 
       <phase>package</phase> 
       <goals> 
       <goal>single</goal> 
       </goals> 
      </execution> 
      </executions> 
     </plugin> 

     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>exec-maven-plugin</artifactId> 
      <version>1.5.0</version> 
     </plugin> 

     </plugins> 
    </pluginManagement> 

    </build> 

    <dependencyManagement> 
    <dependencies> 
     <dependency> 
     <groupId>org.aspectj</groupId> 
     <artifactId>aspectjrt</artifactId> 
     <version>${aspectj.version}</version> 
     </dependency> 
     <dependency> 
     <groupId>de.scrum-master.stackoverflow</groupId> 
     <artifactId>common</artifactId> 
     <version>1.0-SNAPSHOT</version> 
     </dependency> 
     <dependency> 
     <groupId>de.scrum-master.stackoverflow</groupId> 
     <artifactId>aspect</artifactId> 
     <version>1.0-SNAPSHOT</version> 
     </dependency> 
    </dependencies> 
    </dependencyManagement> 

    <modules> 
    <module>common</module> 
    <module>application</module> 
    <module>aspect</module> 
    </modules> 

</project> 

模块“常见”:

该模块包含由两个“应用”和“方面”,更具体地在TOUT情况下,注释类中使用的代码。

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <parent> 
    <groupId>de.scrum-master.stackoverflow</groupId> 
    <artifactId>main</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    </parent> 

    <artifactId>common</artifactId> 

</project> 
package de.scrum_master.common; 

import java.lang.annotation.ElementType; 
import java.lang.annotation.Retention; 
import java.lang.annotation.RetentionPolicy; 
import java.lang.annotation.Target; 

@Retention(RetentionPolicy.RUNTIME) 
@Target(ElementType.METHOD) 
public @interface YourAnnotation { 
    boolean isRun() default true; 
} 

模块 “纵横”:

在这里,我们只是有纵横码。

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <parent> 
    <groupId>de.scrum-master.stackoverflow</groupId> 
    <artifactId>main</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    </parent> 

    <artifactId>aspect</artifactId> 

    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.codehaus.mojo</groupId> 
     <artifactId>aspectj-maven-plugin</artifactId> 
     </plugin> 
    </plugins> 
    </build> 

    <dependencies> 
    <dependency> 
     <groupId>org.aspectj</groupId> 
     <artifactId>aspectjrt</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>de.scrum-master.stackoverflow</groupId> 
     <artifactId>common</artifactId> 
    </dependency> 
    </dependencies> 

</project> 
package de.scrum_master.aspect; 

import de.scrum_master.common.YourAnnotation; 
import org.aspectj.lang.ProceedingJoinPoint; 
import org.aspectj.lang.annotation.Around; 
import org.aspectj.lang.annotation.Aspect; 
import org.aspectj.lang.annotation.Pointcut; 

@Aspect 
public class YourAspect { 
    @Pointcut("@annotation(yourAnnotationVariableName)") 
    public void annotationPointCutDefinition(YourAnnotation yourAnnotationVariableName) { 
    } 

    @Pointcut("execution(* *(..))") 
    public void atExecution() { 
    } 

    @Around("annotationPointCutDefinition(yourAnnotationVariableName) && atExecution()") 
    public Object aroundAdvice(ProceedingJoinPoint thisJoinPoint, YourAnnotation yourAnnotationVariableName) throws Throwable { 
    if (yourAnnotationVariableName.isRun()) { 
     Object result; 
     try { 
     System.out.println("Before " + thisJoinPoint); 
     result = thisJoinPoint.proceed(); 
     } catch (Throwable t) { 
     throw t; 
     } finally { 
     System.out.println("After " + thisJoinPoint); 
     } 
     return result; 
    } 
    return thisJoinPoint.proceed(); 
    } 
} 

模块 “应用”:

该模块包含应用程序代码。它配置了Exec Maven和Maven Assembly插件。此外,将“aspect”模块定义为AspectJ Maven的一个方面库。

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <parent> 
    <groupId>de.scrum-master.stackoverflow</groupId> 
    <artifactId>main</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    </parent> 

    <artifactId>application</artifactId> 

    <build> 
    <plugins> 

     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-assembly-plugin</artifactId> 
     <configuration> 
      <archive> 
      <manifest> 
       <addClasspath>true</addClasspath> 
       <mainClass>de.scrum_master.app.MainClass</mainClass> 
      </manifest> 
      </archive> 
     </configuration> 
     </plugin> 

     <plugin> 
     <groupId>org.codehaus.mojo</groupId> 
     <artifactId>exec-maven-plugin</artifactId> 
     <configuration> 
      <mainClass>de.scrum_master.app.MainClass</mainClass> 
     </configuration> 
     </plugin> 

     <plugin> 
     <groupId>org.codehaus.mojo</groupId> 
     <artifactId>aspectj-maven-plugin</artifactId> 
     <configuration> 
      <aspectLibraries> 
      <aspectLibrary> 
       <groupId>de.scrum-master.stackoverflow</groupId> 
       <artifactId>aspect</artifactId> 
      </aspectLibrary> 
      </aspectLibraries> 
     </configuration> 
     </plugin> 

    </plugins> 
    </build> 

    <dependencies> 
    <dependency> 
     <groupId>de.scrum-master.stackoverflow</groupId> 
     <artifactId>common</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>de.scrum-master.stackoverflow</groupId> 
     <artifactId>aspect</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.aspectj</groupId> 
     <artifactId>aspectjrt</artifactId> 
    </dependency> 
    </dependencies> 
</project> 
package de.scrum_master.app; 

import de.scrum_master.common.YourAnnotation; 

public class MainClass { 
    public static void main(String[] args) { 
    MainClass yourClass = new MainClass(); 
    yourClass.yourMethodAround(); 
    } 

    @YourAnnotation 
    public void yourMethodAround() { 
    System.out.println("Executing TestTarget.yourMethodAround()"); 
    } 
} 

生成日志:

[email protected] MINGW64 ~/Documents/java-src/SO_AJ_MavenMultiModuleProblem 
$ mvn clean install 

(...) 
[INFO] ------------------------------------------------------------------------ 
[INFO] Reactor Summary: 
[INFO] 
[INFO] main ............................................... SUCCESS [ 0.241 s] 
[INFO] common ............................................. SUCCESS [ 0.970 s] 
[INFO] aspect ............................................. SUCCESS [ 1.058 s] 
[INFO] application ........................................ SUCCESS [ 0.607 s] 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD SUCCESS 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 3.111 s 
[INFO] Finished at: 2017-04-07T17:15:39+02:00 
[INFO] Final Memory: 23M/378M 
[INFO] ------------------------------------------------------------------------ 

运行日志:

[email protected] MINGW64 ~/Documents/java-src/SO_AJ_MavenMultiModuleProblem 
$ cd application/ 

[email protected] MINGW64 ~/Documents/java-src/SO_AJ_MavenMultiModuleProblem/application 
$ mvn exec:java 
(...) 
[INFO] ------------------------------------------------------------------------ 
[INFO] Building application 1.0-SNAPSHOT 
[INFO] ------------------------------------------------------------------------ 
[INFO] 
[INFO] --- exec-maven-plugin:1.5.0:java (default-cli) @ application --- 
Before execution(void de.scrum_master.app.MainClass.yourMethodAround()) 
Executing TestTarget.yourMethodAround() 
After execution(void de.scrum_master.app.MainClass.yourMethodAround()) 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD SUCCESS 
[INFO] ------------------------------------------------------------------------ 
(...) 

[email protected] MINGW64 ~/Documents/java-src/SO_AJ_MavenMultiModuleProblem/application 
$ java -jar target/application-1.0-SNAPSHOT.jar 
Before execution(void de.scrum_master.app.MainClass.yourMethodAround()) 
Executing TestTarget.yourMethodAround() 
After execution(void de.scrum_master.app.MainClass.yourMethodAround()) 

更新:我将整个示例项目推到GitHub repository

+0

这是一个很好的解决方案!我会在一段时间尝试。我喜欢这样做的是我在父pom上运行mvn clean isntall,并且所有这些都被编译。但是如果我的某个模块有不同的配置文件会发生?如何在这种情况下指定它?现在我干净安装-Pprofile,但在这种情况下,我会运行在父,而不是在孩子。 谢谢! – Motomine

+0

我不明白这个问题。如果使用'-Pprofile'运行主版本,配置文件将应用于该配置文件所在的所有模块。 – kriegaex

+0

我不知道。因为配置文件只存在于一个模块中,而不存在于其他模块中。我认为我背后有一个窍门。我会试试看 !谢谢! – Motomine

相关问题