2017-06-12 4 views
1

Eclipseネオンでaspectjというサンプルmavenを作成しようとしています。しかし、側面は製織/加工されていません(下記の出力を参照)。私は多くの原因と解決法を検討しましたが、うまくいきませんでした(以下の関連する質問を参照)。どんな助けや洞察も非常に高く評価されるでしょう。ありがとう!Maven(まだ)が動作していないAspectJ

テクノロジーズ使用:

  • のJava jdk-1.8
  • エクリプス(のJava EE)ネオン3
  • のApache Mavenの3.5.0
  • junit-4.5(達人介し含む)
  • aspectjrt-1.8.9(付属しますを通して)

(私はまた、別のプロジェクトのための私のEclipseのインストールにAJDTプラグインをインストール - これはaspectjのMavenのリポジトリのバージョンを阻害するかどうかわからない)

ディレクトリ

$ tree . 
. 
├── pom.xml 
└── src 
    ├── main 
    | └── java 
    |  └── com 
    |   └── hellomaven 
    |    └── quickstart 
    |     ├── App.java 
    |     └── AppAspect.java 
    └── test 
     └── java 
      └── com 
       └── hellomaven 
        └── quickstart 
         └── AppTest.java 

アプリケーション。 Javaの

package com.hellomaven.quickstart; 

public class App { 
    public static void main(String[] args) { 
     System.out.println("Hello World!"); 
     say("billy", "Nice to meet you"); 
     Dog d = new Dog(); 
     d.bark(2); 
    } 

    public static void say(String name, String word) { 
     System.out.println(name.toUpperCase() + " says " + word.toLowerCase() + "!"); 
    } 
} 

class Dog { 
    Dog() { 
     System.out.println("..Dog init code.."); 
    } 

    public void bark(int n) { 
     for (int i = 0; i < n; i++) { 
      System.out.print("bark "); 
     } 
     System.out.println("!"); 
    } 

} 

AppAspect.ja私が試したとに失敗したVA

package com.hellomaven.quickstart; 

import org.aspectj.lang.annotation.After; 
import org.aspectj.lang.annotation.Around; 
import org.aspectj.lang.annotation.Aspect; 
import org.aspectj.lang.annotation.Before; 
import org.aspectj.lang.annotation.Pointcut; 

@Aspect 
public class AppAspect { 
    @Before("execution(public static * *(..))") 
    public void testAspectBefore() { 
     System.out.println("Before Okay"); 
    } 

    @Pointcut("execution(* *(..))") 
    public void testAspectPointcut() { 
     System.out.println("Pointcut Okay"); 
    } 

    @After("execution(* *(..))") 
    public void testAspectAfter() { 
     System.out.println("After Okay"); 
    } 

    @Around("execution(* *(..))") 
    public void testAspectAround() { 
     System.out.println("Around Okay"); 
    } 
} 

のpom.xml

<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>com.hellomaven</groupId> 
    <artifactId>quickstart</artifactId> 
    <packaging>jar</packaging> 
    <version>0.0.1-SNAPSHOT</version> 

    <name>quickstart</name> 
    <url>http://maven.apache.org</url> 

    <properties> 
     <java.version>1.8</java.version> 
     <aspectj.version>1.8.9</aspectj.version> 
     <junit.version>4.5</junit.version> 

     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 
    </properties> 

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

       <plugin> 
        <groupId>org.codehaus.mojo</groupId> 
        <artifactId>aspectj-maven-plugin</artifactId> 
        <version>1.9</version> 
        <configuration> 
         <showWeaveInfo>true</showWeaveInfo> 
         <source>${java.version}</source> 
         <target>${java.version}</target> 
         <Xlint>ignore</Xlint> 
         <complianceLevel>${java.version}</complianceLevel> 
         <encoding>UTF-8</encoding> 
         <verbose>true</verbose> 
        </configuration> 
        <executions> 
         <execution> 
          <phase>process-sources</phase> 
          <goals> 
           <goal>compile</goal> 
           <goal>test-compile</goal> 
          </goals> 
         </execution> 
        </executions> 
        <dependencies> 
         <dependency> 
          <groupId>org.aspectj</groupId> 
          <artifactId>aspectjrt</artifactId> 
          <version>${aspectj.version}</version> 
         </dependency> 
         <dependency> 
          <groupId>org.aspectj</groupId> 
          <artifactId>aspectjtools</artifactId> 
          <version>${aspectj.version}</version> 
         </dependency> 
        </dependencies> 
       </plugin> 

       <plugin> 
        <groupId>org.codehaus.mojo</groupId> 
        <artifactId>exec-maven-plugin</artifactId> 
        <version>1.3</version> 
        <configuration> 
         <mainClass>com.hellomaven.quickstart</mainClass> 
        </configuration> 
       </plugin> 

      </plugins> 
     </pluginManagement> 
    </build> 

    <dependencies> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>${junit.version}</version> 
      <scope>test</scope> 
     </dependency> 

     <dependency> 
      <groupId>org.aspectj</groupId> 
      <artifactId>aspectjrt</artifactId> 
      <version>${aspectj.version}</version> 
     </dependency> 
    </dependencies> 
</project> 

出力

<!-- language: lang-none --> 
Hello World! 
BILLY says nice to meet you! 
..Dog init code.. 
bark bark ! 

関連質問:

答えて

1

なぜかわからないけど、コード、aspectjweaver-1.8.9依存関係を含めjunit-4.12に更新し、アスペクトコードを変更した後正常に動作します。ここ が更新アスペクトコード(AppAspect.java)である:ここでは

package com.hellomaven.quickstart; 

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

@Aspect 
public class AppAspect { 

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

    @Before("defineEntryPoint()") 
    public void aaa(JoinPoint joinPoint) { 
     System.out.println("aspect before"); 
    } 

    @After("defineEntryPoint()") 
    public void bbb(JoinPoint joinPoint) { 
     System.out.println("aspect after"); 
    } 
} 

は新しいdependenciesです:

<dependencies> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>${junit.version}</version> 
     <scope>test</scope> 
    </dependency> 

    <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> 
</dependencies> 
関連する問題