2016-08-20 9 views
2

私はマルチモジュールのMavenプロジェクトを持っていて、私のモジュールの1つにSpring AOPを設定しました。残念ながら、AOPはプロジェクトのためにのみ動作します。マルチモジュールMavenプロジェクトのAOPの側面

pom.xml

<parent> 
    <artifactId>spring-boot-starter-parent</artifactId> 
    <groupId>org.springframework.boot</groupId> 
    <version>1.3.6.RELEASE</version> 
</parent> 

<modules> 
    <module>rabbitmq</module> 
    <module>rss_parser</module> 
</modules> 

<dependencies> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-aop</artifactId> 
    </dependency> 
</dependencies> 

<build> 
    <pluginManagement> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <configuration> 
        <source>1.8</source> 
        <target>1.8</target> 
       </configuration> 
      </plugin> 
     </plugins> 
    </pluginManagement> 
</build> 

最初のモジュール(私のAOPの設定がある):ここに私のMavenの設定である

<groupId>com.rss.rabbitmq</groupId> 
<artifactId>rabbitmq</artifactId> 
<version>1.0-SNAPSHOT</version> 
<packaging>jar</packaging> 
<name>rabbitmq</name> 

<parent> 
    <groupId>gpw.radar.rss</groupId> 
    <artifactId>parent-module</artifactId> 
    <version>1.0</version> 
</parent> 

<properties> 
    <java.version>1.8</java.version> 
    <rss.parser.version>1.0-SNAPSHOT</rss.parser.version> 
</properties> 

<dependencies> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-amqp</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-aop</artifactId> 
     <scope>compile</scope> 
    </dependency> 
    <dependency> 
     <groupId>com.rss.parser</groupId> 
     <artifactId>rss-parser</artifactId> 
     <version>${rss.parser.version}</version> 
    </dependency> 
</dependencies> 

第二のモジュール(AOPが動作しない場合) :

<groupId>com.rss.parser</groupId> 
<artifactId>rss-parser</artifactId> 
<version>1.0-SNAPSHOT</version> 
<packaging>jar</packaging> 
<name>rss_parser</name> 
<url>http://maven.apache.org</url> 

<properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    <maven.compiler.source>1.8</maven.compiler.source> 
    <maven.compiler.target>1.8</maven.compiler.target> 
    <junit.version>4.12</junit.version> 
    <rometools.version>1.7.0</rometools.version> 
    <jackson-datatype-jsr310.version>2.6.1</jackson-datatype-jsr310.version> 
    <jackson-databind.version>2.6.6</jackson-databind.version> 
</properties> 

<parent> 
    <groupId>gpw.radar.rss</groupId> 
    <artifactId>parent-module</artifactId> 
    <version>1.0</version> 
</parent> 

<dependencies> 
    <dependency> 
     <groupId>com.rometools</groupId> 
     <artifactId>rome-fetcher</artifactId> 
     <version>${rometools.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>com.fasterxml.jackson.datatype</groupId> 
     <artifactId>jackson-datatype-jsr310</artifactId> 
     <version>${jackson-datatype-jsr310.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>com.fasterxml.jackson.core</groupId> 
     <artifactId>jackson-databind</artifactId> 
     <version>${jackson-databind.version}</version> 
    </dependency> 
</dependencies> 

最後に、最初のモジュールのSpring AOP構成:

@Pointcut("within(com.rss.rabbitmq.cron..*) || within(com.rss.rabbitmq.sender..*) || within(com.rss.parser..*)") 
public void loggingPointcut() { 
} 

そして、私はこの点でポイントカットを使用しています:

@Around("loggingPointcut()") 
public Object logAround(ProceedingJoinPoint joinPoint) throws Throwable { 
    // <<implementation>> 
} 

をいくつかの掘削後、私はクラスパス内でmyproject/jarファイルを持っている場合、それが正常に動作する必要があることを理解しますが、私の場合、それはありませんうまくいかない。最初のモジュールのAOPは、"within(com.rss.rabbitmq.cron..*) || within(com.rss.rabbitmq.sender..*)"の場合は正しく動作しますが、2番目のプロジェクトの場合は正しく動作しません。

また、最初の部分が同じで、問題の原因になる可能性があると思っていたので、パッケージ名を変更しようとしましたが、そうではありません。

答えて

0

親の依存関係が適切に継承されない場合は、dependencyManagementを使用してください。

それがより明確documentation here

親に説明する - のpom.xml

<parent> 
    <artifactId>spring-boot-starter-parent</artifactId> 
    <groupId>org.springframework.boot</groupId> 
    <version>1.3.6.RELEASE</version> 
</parent> 

<modules> 
    <module>rabbitmq</module> 
    <module>rss_parser</module> 
</modules> 

<dependencyManagement> 
    <dependencies> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-aop</artifactId> 
    </dependency> 
    </dependencies> 
</dependencyManagement> 

<build> 
    <pluginManagement> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <configuration> 
      <source>1.8</source> 
      <target>1.8</target> 
     </configuration> 
     </plugin> 
    </plugins> 
    </pluginManagement> 
</build> 

第一のモジュール - のpom.xml

<groupId>com.rss.rabbitmq</groupId> 
<artifactId>rabbitmq</artifactId> 
<version>1.0-SNAPSHOT</version> 
<packaging>jar</packaging> 
<name>rabbitmq</name> 

<parent> 
    <groupId>gpw.radar.rss</groupId> 
    <artifactId>parent-module</artifactId> 
    <version>1.0</version> 
</parent> 

<properties> 
    <java.version>1.8</java.version> 
    <rss.parser.version>1.0-SNAPSHOT</rss.parser.version> 
</properties> 

<dependencies> 
    <dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-amqp</artifactId> 
    </dependency> 
    <dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-aop</artifactId> 
    </dependency> 
    <dependency> 
    <groupId>com.rss.parser</groupId> 
    <artifactId>rss-parser</artifactId> 
    <version>${rss.parser.version}</version> 
    </dependency> 
</dependencies> 

第二のモジュール - のpom.xml

<groupId>com.rss.parser</groupId> 
<artifactId>rss-parser</artifactId> 
<version>1.0-SNAPSHOT</version> 
<packaging>jar</packaging> 
<name>rss_parser</name> 
<url>http://maven.apache.org</url> 

<properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    <maven.compiler.source>1.8</maven.compiler.source> 
    <maven.compiler.target>1.8</maven.compiler.target> 
    <junit.version>4.12</junit.version> 
    <rometools.version>1.7.0</rometools.version> 
    <jackson-datatype-jsr310.version>2.6.1</jackson-datatype-jsr310.version> 
    <jackson-databind.version>2.6.6</jackson-databind.version> 
</properties> 

<parent> 
    <groupId>gpw.radar.rss</groupId> 
    <artifactId>parent-module</artifactId> 
    <version>1.0</version> 
</parent> 

<dependencies> 
    <dependency> 
    <groupId>com.rometools</groupId> 
    <artifactId>rome-fetcher</artifactId> 
    <version>${rometools.version}</version> 
    </dependency> 
    <dependency> 
    <groupId>com.fasterxml.jackson.datatype</groupId> 
    <artifactId>jackson-datatype-jsr310</artifactId> 
    <version>${jackson-datatype-jsr310.version}</version> 
    </dependency> 
    <dependency> 
    <groupId>com.fasterxml.jackson.core</groupId> 
    <artifactId>jackson-databind</artifactId> 
    <version>${jackson-databind.version}</version> 
    </dependency> 
</dependencies> 
<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-aop</artifactId> 
</dependency> 
+0

動作しませんでした。おそらく私はいくつかの春のAopの概念が欠けているでしょう。私はmodule1とmodule2のためにすごくプロジェクトを作った。 module2については、mvnをインストールしてから、module1用にmvnパッケージを実行しましたが、aopはmodul2で動作しません。 – Pulkownik

0

最後に、どこに問題があるのか​​が分かりました。

Spring beanの操作の実行をアドバイスする必要がある場合は、Spring AOPが適切です。 Springコンテナによって管理されていないオブジェクト(通常はドメインオブジェクト など)を にアドバイスする必要がある場合は、AspectJを使用する必要があります。

私の2番目のモジュールはスプリングを使用していないため、スプリングの代わりにAspetJを使用する必要があります。

+0

正確に。あなたの側面をコンパイルして織るには、[AspectJ Maven Plugin](http://www.mojohaus.org/aspectj-maven-plugin/)を使うべきです。このプラグインには、他のモジュールの要素をプレーンなJavaモジュールに含めるオプションがあります。 – kriegaex

関連する問題