您的配置存在几个问题:
- 该方面应
Aspect
使用大写字母“ A” 命名,而不是aspect
保留关键字。 - POM缺少结束
</project>
标记。 - POM有一个
<pluginManagement>
部分,但没有单独的<plugins>
部分,即,您为插件提供了默认值,但实际上并未声明要使用它们。因此,您可以使用<plugins>
不带独立部分的内容,<pluginManagement>
也可以在其他<plugins>
部分中重新声明插件。 - 的
aspectj-maven-plugin
需要<version>
。您忘记指定一个。 - 该
aspectj-maven-plugin
还需要一个<complianceLevel>
配置。 - 您使用编译时编织,因此不需要
<outxml>
设置。仅在加载时编织时才需要。 - 该 aspectjrt 依赖需要至少版本1.7.4,以与所使用的版本不兼容 AspectJ的Maven的插件 默认情况下,以编译来源1.6。
除此之外,如果您没有令人信服的理由使用较旧版本的Maven插件和依赖项(例如 JUnit 和 exec-maven-plugin),
则建议使用较新版本的Maven插件和依赖项。我还建议使用最新的AspectJ版本1.8.2,并且还指定在 Aspectj-maven-plugin
内部使用该版本。
工作 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.aop</groupId> <artifactId>aop1</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>aop1</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjrt</artifactId> <version>1.7.4</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.prehaus.mojo</groupId> <artifactId>aspectj-maven-plugin</artifactId> <version>1.6</version> <configuration> <complianceLevel>1.7</complianceLevel> </configuration> <executions> <execution> <goals> <goal>compile</goal> </goals> <configuration> <source>1.7</source> <target>1.7</target> </configuration> </execution> </executions> </plugin> <plugin> <groupId>org.prehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>1.1</version> <configuration> <mainClass>com.aop.aop1.App</mainClass> </configuration> </plugin> </plugins> </build></project>
使用建议的更改 工作 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.aop</groupId> <artifactId>aop1</artifactId> <version>0.0.1-SNAPSHOT</version> <name>AOP Sample</name> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <aspectj.version>1.8.2</aspectj.version> <java.source-target.version>1.7</java.source-target.version> </properties> <build> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>${java.source-target.version}</source> <target>${java.source-target.version}</target> <!-- importANT --> <useIncrementalCompilation>false</useIncrementalCompilation> </configuration> </plugin> <plugin> <groupId>org.prehaus.mojo</groupId> <artifactId>aspectj-maven-plugin</artifactId> <version>1.6</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>UTF-8</encoding> <verbose>true</verbose> </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> </dependencies> </plugin> <plugin> <groupId>org.prehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>1.3</version> <configuration> <mainClass>com.aop.aop1.App</mainClass> </configuration> </plugin> <plugin> <groupId>org.dstovall</groupId> <artifactId>onejar-maven-plugin</artifactId> <version>1.4.4</version> <executions> <execution> <configuration> <onejarVersion>0.96</onejarVersion> <mainClass>com.aop.aop1.App</mainClass> <attachToBuild>true</attachToBuild> </configuration> <goals> <goal>one-jar</goal> </goals> </execution> </executions> </plugin> </plugins> </build> <pluginRepositories> <pluginRepository> <id>oneJAR googlepre.com</id> <url>http://onejar-maven-plugin.googlepre.com/svn/mavenrepo</url> </pluginRepository> </pluginRepositories> <dependencies> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjrt</artifactId> <version>${aspectj.version}</version> <!--<scope>runtime</scope>--> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> </dependencies></project>顺便说一句, onejar-maven-plugin
只是一个好东西,我喜欢用它来构建一个独立的超级JAR(又名胖JAR),其中包含运行该软件所需的一切,即您的类/方面以及AspectJ运行时。您可以使用以下命令运行程序
java -jar aop1-0.0.1-SNAPSHOT.one-jar.jar
输出应该类似于
mvn exec:java没有Maven的东西:
Hello World!BEHOLD the power of AOP !!!IN FOO.



