2016-04-08 3 views
0

Ich versuche, einen Rat einer Methode eines Projekts (test5) zu erstellen, die von einem anderen Projekt (testMaven) aufgerufen wird. Ich habe das Projekt test5 bereits als Abhängigkeit in testMavens pom.xml aufgenommen und einen Hinweis in testMavens Klasse eingerichtet, aber es wird trotzdem nicht ausgeführt. Der Aufruf der Methode (dfg) funktioniert einwandfrei.Advice AspectJ ein Methodenaufruf von verschiedenen Maven-Projekt

Hier sind die Code dafür:

MainApp.java (testMaven)

package testMaven; 

import test5.yxc; 

public class MainApp { 

    public static void main(String[] args) { 
     yxc b = new yxc(); 
     b.dfg(2); 
    } 
} 

yxc.java (test5)

package test5; 

public class yxc { 

    public void dfg(int a){ 
     System.out.println(a); 

    } 
} 

testAspect.java (testMaven)

package testMaven; 

import org.aspectj.lang.annotation.Aspect; 
import org.aspectj.lang.annotation.Pointcut; 
import org.aspectj.lang.annotation.Before; 
import test5.yxc; 

@Aspect 
public class testAspect { 

    @Before("execution(* test5.yxc.dfg(..))") 
    public void testBefore(){ 
     System.out.println("yooi"); 
    } 
} 

pom.xml (tes tMaven)

<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>testingMaven</groupId> 
    <artifactId>testMaven</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 

    <properties> 
     <spring.version>4.2.5.RELEASE</spring.version> 
     <java.version>1.8</java.version> 
     <!-- Maven Plugin Versions --> 
     <maven.compiler.plugin.version>3.2</maven.compiler.plugin.version> 
    </properties> 

    <dependencies> 
     <dependency> 
      <groupId>org.aspectj</groupId> 
      <artifactId>aspectjrt</artifactId> 
      <version>1.8.9</version> 
     </dependency> 
     <dependency> 
      <groupId>org.aspectj</groupId> 
      <artifactId>aspectjweaver</artifactId> 
      <version>1.8.9</version> 
     </dependency> 
     <dependency> 
      <groupId>test5</groupId> 
      <artifactId>test5</artifactId> 
      <version>0.0.1-SNAPSHOT</version> 
     </dependency> 

    </dependencies> 

    <build> 

     <plugins> 
      <plugin> 
       <groupId>org.codehaus.mojo</groupId> 
       <artifactId>aspectj-maven-plugin</artifactId> 
       <version>1.8</version> 
       <dependencies> 
        <dependency> 
         <groupId>org.aspectj</groupId> 
         <artifactId>aspectjtools</artifactId> 
         <version>${aspectj.version}</version> 
        </dependency> 
       </dependencies> 
      </plugin> 
      <plugin> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>${maven.compiler.plugin.version}</version> 
       <configuration> 
        <source>${java.version}</source> 
        <target>${java.version}</target> 
       </configuration> 
      </plugin> 

     </plugins> 
    </build> 
</project> 

Können Sie mir helfen, was ist los damit? Dank

Antwort

1

Karo Code in testMaven und überprüft den Code aus und verändert die POM wie folgt:

<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>testMaven</groupId> 
<artifactId>testMaven</artifactId> 
<version>0.0.1-SNAPSHOT</version> 

<properties> 

    <java.version>1.8</java.version> 
    <aspectj.version>1.8.9</aspectj.version> 
    <!-- Maven Plugin Versions --> 
    <maven.compiler.plugin.version>3.2</maven.compiler.plugin.version> 

</properties> 

<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> 

<build> 

    <plugins> 
     <plugin> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <configuration> 
       <source>${java.version}</source> 
       <target>${java.version}</target> 
      </configuration> 
     </plugin> 

     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>aspectj-maven-plugin</artifactId> 
      <version>1.8</version> 
      <configuration> 
       <complianceLevel>${java.version}</complianceLevel> 
       <source>${java.version}</source> 
       <target>${java.version}</target> 
       <showWeaveInfo>true</showWeaveInfo> 
      </configuration> 
      <executions> 
       <execution> 
        <id>AspectJ-Classes</id> 
        <phase>process-classes</phase> 
        <goals> 
         <goal>compile</goal> 
        </goals> 
       </execution> 
       <execution> 
        <id>AspectJ-Test-Classes</id> 
        <phase>process-test-classes</phase> 
        <goals> 
         <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> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <version>2.6</version> 
      <configuration> 
       <descriptorRefs> 
        <descriptorRef>jar-with-dependencies</descriptorRef> 
       </descriptorRefs> 
      </configuration> 
      <executions> 
       <execution> 
        <phase>package</phase> 
        <goals> 
         <goal>single</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 

    </plugins> 

</build> 

HINWEIS: hinzugefügt Montage Plugin Prüfung/Überprüfung für mich einfacher zu machen.

Wenn ich kompilieren das Projekt, das ich in der Maven finden Sie in der folgenden Eintrag protokolliert:

[INFO] --- aspectj-maven-plugin:1.8:compile (AspectJ-Classes) @ testMaven --- 
[INFO] Showing AJC message detail for messages of types: [error, warning, fail] 
[INFO] Join point 'method-execution(void testMaven.aaaa.aa(int))' in Type 'testMaven.aaaa' (aaaa.java:5) advised by before advice from 'testMaven.aspecter' (aspecter.java:10) 

Wenn ich jetzt das Glas wie folgt ausführen ich folgendes Ergebnis sehen:

...>java -cp target/testMaven-0.0.1-SNAPSHOT-jar-with-dependencies.jar testMaven/MainApp 
yooi 
2 

Angesichts der MainApp wie folgt:

package testMaven; 

public class MainApp { 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 

     aaaa a = new aaaa(); 
     a.aa(2); 
    } 

} 

die Klasse, die eingeleitet wird, druckt das übergebene Argument

package testMaven; 

public class aaaa { 

    public void aa(int a){ 
     System.out.println(a); 
    } 
} 

Und der Abfangjäger als

package testMaven; 
import org.aspectj.lang.annotation.Aspect; 
import org.aspectj.lang.annotation.Pointcut; 
import org.aspectj.lang.annotation.Before; 


@Aspect 
public class aspecter { 
    @Before("execution(* testMaven.aaaa.aa(..))") 
    public void testBefore(){ 
     System.out.println("yooi"); 
    } 
} 

folgt würde ich sagen, es funktioniert :)

+0

es immer noch nicht gibt mir den Rat, Ihren Rat auf Plugin (btw habe ich nicht verwenden der Ausführungsteil, da es einen Fehler mit der tools.jar gibt, der versucht es zu beheben, aber immer noch kein Glück) –

+0

Siehst du den aspectj Compiler etwas tun und Logeinträge wie oben erwähnt anzeigen? – uniknow

+0

nein es gibt nichts wie du oben erwähnt –