I build small library (Java and Maven) - using AspectJ. Library must be independent. Library deliver Aspects and Annotations. Function of library is - \"call advice when exe
According to the AspectJ Maven documentation, chapter "using aspect libraries", you need to
,
because it is already assigned in step 1) in the plugin
section as an
.Here is a concrete example:
Aspect library POM, marker annotation and sample aspect:
4.0.0
de.scrum-master.stackoverflow
aspectj-lib
0.0.1-SNAPSHOT
AspectJ Library
UTF-8
1.8
1.8.7
org.apache.maven.plugins
maven-compiler-plugin
3.3
${java.source-target.version}
${java.source-target.version}
false
org.codehaus.mojo
aspectj-maven-plugin
1.7
${java.source-target.version}
${java.source-target.version}
ignore
${java.source-target.version}
${project.build.sourceEncoding}
process-sources
compile
test-compile
org.aspectj
aspectjtools
${aspectj.version}
org.codehaus.mojo
aspectj-maven-plugin
org.aspectj
aspectjrt
${aspectj.version}
runtime
org.aspectj
aspectjrt
Scrum-Master.de - Agile Project Management
http://scrum-master.de
package de.scrum_master.aspect;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Marker {}
package de.scrum_master.aspect;
public aspect MyAspect {
before() : execution(* *(..)) && @annotation(Marker) {
System.out.println(thisJoinPoint);
}
}
Now run mvn clean install
on the aspect library project so as to install the dependency into your local Maven repo.
Java application POM and sample application:
By the way, in the POM I have also added two optional plugins:
target/java-app-0.0.1-SNAPSHOT.one-jar.jar
. You can just run your application via java -jar target/java-app-0.0.1-SNAPSHOT.one-jar.jar
.mvn clean install exec:java
.These two are only for convenience, you do not need them if you dislike them.
4.0.0
de.scrum-master.stackoverflow
java-app
0.0.1-SNAPSHOT
Java Application
UTF-8
1.8
1.8.7
de.scrum_master.app.Application
org.apache.maven.plugins
maven-compiler-plugin
3.3
${java.source-target.version}
${java.source-target.version}
false
org.codehaus.mojo
aspectj-maven-plugin
1.7
${java.source-target.version}
${java.source-target.version}
ignore
${java.source-target.version}
${project.build.sourceEncoding}
de.scrum-master.stackoverflow
aspectj-lib
process-sources
compile
test-compile
org.aspectj
aspectjtools
${aspectj.version}
org.codehaus.mojo
exec-maven-plugin
1.4.0
${main-class}
org.dstovall
onejar-maven-plugin
1.4.4
one-jar
0.96
${main-class}
true
org.codehaus.mojo
aspectj-maven-plugin
org.codehaus.mojo
exec-maven-plugin
${main-class}
org.dstovall
onejar-maven-plugin
${main-class}
OneJAR googlecode.com
http://onejar-maven-plugin.googlecode.com/svn/mavenrepo
org.aspectj
aspectjrt
${aspectj.version}
runtime
de.scrum-master.stackoverflow
aspectj-lib
0.0.1-SNAPSHOT
org.aspectj
aspectjrt
de.scrum-master.stackoverflow
aspectj-lib
Scrum-Master.de - Agile Project Management
http://scrum-master.de
This little driver application demonstrates that you can now annotate methods with @Marker
, in this case only foo
and zot
, but not bar
:
package de.scrum_master.app;
import de.scrum_master.aspect.Marker;
public class Application {
@Marker
public static void foo() {}
public static void bar() {}
@Marker
public static void zot() {}
public static void main(String[] args) {
foo();
bar();
zot();
}
}
Console log:
java -jar target/java-app-0.0.1-SNAPSHOT.one-jar.jar
execution(void de.scrum_master.app.Application.foo())
execution(void de.scrum_master.app.Application.zot())