这是一个适合我的设置(使用记录在案的aspectj-maven-plugin)。
项目结构如下:
$树。
.
├── pom.xml
└── 源
├── 主要
│ └── java
│ └── com
│ └── stackoverflow
│ └── Q3651690
│ ├── App.java
│ └── DontWriteToTheConsole.aj
└── 测试
└── java
└── com
└── 堆栈溢出
└── Q3651690
└── AppTest.java
使用以下小演示方面:
public aspect DontWriteToTheConsole {
pointcut sysOutOrErrAccess() : get(* System.out) || get(* System.err);
declare error
: sysOutOrErrAccess()
: "Don't write to the console";
}
pom.xml 配置如下:
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.stackoverflow.Q3651690</groupId>
<artifactId>Q3651690</artifactId>
<version>1.0-SNAPSHOT</version>
<name>Q3651690</name>
<properties>
<maven.compiler.source>1.6</maven.compiler.source>
<maven.compiler.target>1.6</maven.compiler.target>
</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.6.7</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<version>1.3</version>
<executions>
<execution>
<goals>
<goal>compile</goal><!-- to weave all your main classes -->
<goal>test-compile</goal><!-- to weave all your test classes -->
</goals>
</execution>
</executions>
<configuration>
<source>${maven.compiler.source}</source>
<target>${maven.compiler.target}</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
关键部分是:
- 为 1.6 源代码级别配置 maven-compiler-plugin(这是使用 完成的
properties
)
- 为 1.6 源代码级别配置 aspectj-maven-plugin(我在
properties
这里重用了用于配置 maven-compiler-plugin)
第二步似乎是多余的,但是,事情就是这样。
这样,我就能够使用注释等来编织代码:
$ mvn 全新安装
[INFO] 正在扫描项目...
[信息] --------------------------------------------- -------------------------
[INFO] 楼 Q3651690
[INFO] 任务段:[清理,安装]
[信息] --------------------------------------------- -------------------------
[信息] [清洁:清洁 {执行:默认清洁}]
[信息] [资源:资源{执行:默认资源}]
[INFO] 使用 'UTF-8' 编码复制过滤的资源。
[INFO] 跳过不存在的资源目录 /home/pascal/Projects/stackoverflow/Q3651690/src/main/resources
[信息] [编译器:编译{执行:默认编译}]
[INFO] 将 1 个源文件编译到 /home/pascal/Projects/stackoverflow/Q3651690/target/classes
[INFO] [aspectj:编译{执行:默认}]
[错误] 不要写入控制台
[信息] --------------------------------------------- -------------------------
[错误] 构建错误
[信息] --------------------------------------------- -------------------------
[信息] 编译器错误:
System.out.println("Hello World!");
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/home/pascal/Projects/stackoverflow/Q3651690/src/main/java/com/stackoverflow/Q3651690/App.java:11:0::0 不要写入控制台
另见:/home/pascal/Projects/stackoverflow/Q3651690/src/main/java/com/stackoverflow/Q3651690/DontWriteToTheConsole.aj:8::0
...