Java AspectJ模块依赖与Maven-如何使用依赖模块的类型间声明方法
这就是我的处境: 我有一个maven项目Java AspectJ模块依赖与Maven-如何使用依赖模块的类型间声明方法,java,maven,aop,aspectj,aspectj-maven-plugin,Java,Maven,Aop,Aspectj,Aspectj Maven Plugin,这就是我的处境: 我有一个maven项目我的项目aj依赖关系由两个jar模块组成: my project aj dependencyJarWithAJ(如果我有,请参阅aspectAppWithAj\u ahah.aj中下面的ahah()方法) my project aj DependencyJarWithout aj 我的问题是,我想在第二个模块中使用在第一个模块方面定义的一些声明方法,但可能我遗漏了一些东西。 我的poms配置如下: Maven项目pom(my project aj d
我的项目aj依赖关系由两个jar模块组成:
my project aj dependencyJarWithAJ
(如果我有,请参阅aspectAppWithAj\u ahah.aj
中下面的ahah()
方法)
my project aj DependencyJarWithout aj
我的问题是,我想在第二个模块中使用在第一个模块方面定义的一些声明方法,但可能我遗漏了一些东西。
我的poms配置如下:
Maven项目pom(my project aj dependency
):
Maven模块2 pom(my project aj DependencyJarWithout aj
):
和AppWithAj_-Ahah.aj
是:
package org.my.project.aj.dependencyJarWithAJ;
public class AppWithAj {
public static void main( String[] args ){
System.out.println( "Hello World!" );
}
}
package org.my.project.aj.dependencyJarWithAJ;
public aspect AppWithAj_Ahah {
public String AppWithAj.ahah(){
return "Ahahahah!";
}
}
package org.my.project.aj.dependencyJarWithoutAJ;
import org.my.project.aj.dependencyJarWithAJ.AppWithAj;
public class App {
public static void main( String[] args ) {
System.out.println( "Hello World! " + new AppWithAj().ahah());
}
}
最后,App.java
是:
package org.my.project.aj.dependencyJarWithAJ;
public class AppWithAj {
public static void main( String[] args ){
System.out.println( "Hello World!" );
}
}
package org.my.project.aj.dependencyJarWithAJ;
public aspect AppWithAj_Ahah {
public String AppWithAj.ahah(){
return "Ahahahah!";
}
}
package org.my.project.aj.dependencyJarWithoutAJ;
import org.my.project.aj.dependencyJarWithAJ.AppWithAj;
public class App {
public static void main( String[] args ) {
System.out.println( "Hello World! " + new AppWithAj().ahah());
}
}
我用这个pom配置实现了:
项目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/maven-v4_0_0.xsd">
<name>abc</name>
<modelVersion>4.0.0</modelVersion>
<groupId>com.madx</groupId>
<artifactId>abc</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>abc1</module>
<module>abc2</module>
</modules>
<properties>
<maven.compiler.target>1.7</maven.compiler.target>
<maven.compiler.source>1.7</maven.compiler.source>
<aspectj.version>1.8.9</aspectj.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.madx</groupId>
<artifactId>abc1</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.madx</groupId>
<artifactId>abc2</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<pluginManagement>
<plugins />
</pluginManagement>
</build>
</project>
abc
4.0.0
com.madx
编辑:
似乎如果nonAj项目没有AspectJ特性,它会在.aj定义的方法附近警告您(尽管如果您只是启动它,它工作得很好,但对于eclipse来说,它不是一个错误,顺便说一句,这不允许您使用自动完成ad将代码填充为衰减…)。这是快照:
您的解决方案太复杂了:
- AspectJ(AJ)模块需要AJ Maven插件和对aspectjrt的依赖。到目前为止,一切顺利
- 但是声明的方面只影响其自身模块中的类,并通过ITD对其进行扩展。因此,无需在纯Java模块上使用AJ编译器,纯Java模块只调用来自AJ模块的方法。被调用的方法是由ITD创建的,这与此无关,对于另一个模块来说,它看起来就像普通的Java
- 因此,所有非AJ模块需要的是对AJ模块的正常依赖,因为它使用它的一个类。AJ运行时依赖项是可传递的,应该自动使用
更新:
你要的是POM,给你
根POM:
4.0.0
com.madx
我的项目aj依赖关系
0.0.1-快照
MyProjectAjDependency
聚甲醛
UTF-8
1.7
1.8.9
org.aspectj
aspectjrt
${aspectj.version}
运行时
com.madx
我的项目aj dependencyJarWithAj
${project.version}
com.madx
我的项目aj DependencyJar没有aj
${project.version}
org.apache.maven.plugins
maven编译器插件
3.5.1
${java.source-target.version}
${java.source-target.version}
假的
org.codehaus.mojo
aspectj maven插件
1.8
${java.source-target.version}
${java.source-target.version}
忽视
${java.source-target.version}
${project.build.sourceEncoding}
过程源
编译
测试编译
org.aspectj
aspectjtools
${aspectj.version}
org.codehaus.mojo
execmaven插件
1.4.0
我的项目aj dependencyJarWithAJ
我的项目aj DependencyJar没有aj
带有AspectJ的模块:
4.0.0
com.madx
我的项目aj依赖关系
0.0.1-快照
我的项目aj dependencyJarWithAJ
org.codehaus.mojo
aspectj maven插件
org.aspectj
aspectjrt
普通Java模块:
4.0.0
com.madx
我的项目aj依赖关系
0.0.1-快照
我的项目aj DependencyJar没有aj
org.codehaus.mojo
execmaven插件
org.my.project.aj.dependencyJarWithoutAJ.App
com.madx
我的项目aj dependencyJarWithAj
请注意:我添加了Exec Maven插件只是为了演示,所以您可以这样做:
mvn清洁安装
mvn-pl my project aj DependencyJarWithout aj exec:java
然后您应该在控制台上看到如下内容:
(…)
[信息]---exec maven插件:1.4.0:java(默认cli)@my project aj dependencyJarWithoutAJ---
你好,世界!哈哈哈!
从根目录和普通Java POM中删除Exec Maven,以获得更短的POM。好的,请在这里粘贴最简单的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>
<parent>
<groupId>com.madx</groupId>
<artifactId>abc</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<groupId>com.madx</groupId>
<artifactId>abc1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>abc1</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.8.9</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${java-version}</source>
<target>${java-version}</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>install</id>
<phase>install</phase>
<goals>
<goal>sources</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<!--
Have to use version 1.2 since version 1.3 does not appear to work
with ITDs
-->
<version>1.2</version>
<dependencies>
<!--
You must use Maven 2.0.9 or above or these are ignored (see
MNG-2972)
-->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>${org.aspectj-version}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjtools</artifactId>
<version>${org.aspectj-version}</version>
</dependency>
</dependencies>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>test-compile</goal>
</goals>
</execution>
</executions>
<configuration>
<outxml>true</outxml>
<source>${java-version}</source>
<target>${java-version}</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
<?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>com.madx</groupId>
<artifactId>abc</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<groupId>com.madx</groupId>
<artifactId>abc2</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>abc2</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>com.madx</groupId>
<artifactId>abc1</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${java-version}</source>
<target>${java-version}</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>install</id>
<phase>install</phase>
<goals>
<goal>sources</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<!--
Have to use version 1.2 since version 1.3 does not appear to work
with ITDs
-->
<version>1.2</version>
<dependencies>
<!--
You must use Maven 2.0.9 or above or these are ignored (see
MNG-2972)
-->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>${org.aspectj-version}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjtools</artifactId>
<version>${org.aspectj-version}</version>
</dependency>
</dependencies>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>test-compile</goal>
</goals>
</execution>
</executions>
<configuration>
<outxml>true</outxml>
<source>${java-version}</source>
<target>${java-version}</target>
</configuration>
</plugin>
</plugins>
</build>
</project>