AspectJ + Ant(日志记录)

时间:2013-10-23 13:39:10

标签: logging ant aop aspectj

我是aspectj的新手。我需要使用aspectj在ant项目中实现日志记录。我在网上看过很多教程,我尝试做很简单的事情,但它不起作用。 Mabye我什么都没注意到?

我有2个蚂蚁模块--HelloWorld和AspectModule,它们非常简单。 HelloWorld.java:

package oata;

public class HelloWorld {

    public void doSmth() {
      System.out.println("do smth");
    }

    public static void main(String[] args) {
        System.out.println("Hello World!!!");
        HelloWorld hw = new HelloWorld();
        hw.doSmth();
        hw.doSmth();
    }
}

AspectModule中的LogAspect.aj:

import java.util.logging.Logger;

public aspect LogAspect {
    private static Logger LOGGER = Logger.getLogger(LogAspect.class.getName());

    pointcut logMethod() :
            execution(* oata.HelloWorld.*(..));

    before() : logMethod() {
        LOGGER.info("HELLO FROM ASPECTJ!!!");
        System.out.println("HELLO FROM ASPECTJ!!!");
    }

}

两个模块都在编译和构建,但是当我运行HelloWorld时,LogAspect没有输出。 我做错了什么?

非常感谢您提前获得答案。

UPD: 方面模块的build.xml(AspectsModule)。

<?xml version="1.0" encoding="UTF-8"?>
<project basedir="." default="compile" name="aspects">
    <property name="src" value="src"/>
    <property name="build" value=".build"/>

    <taskdef resource="org/aspectj/tools/ant/taskdefs/aspectjTaskdefs.properties">
        <classpath>
            <pathelement location="lib/aspectjtools-1.7.3.jar"/>
        </classpath>
    </taskdef>

    <target name="clean">
        <delete dir="${build}"/>
    </target>

    <target name="compile">
        <mkdir dir="${build}"/>
        <iajc destdir="${build}" sourceroots="${src}">
            <classpath>
                <pathelement location="lib/aspectjrt-1.7.3.jar"/>
            </classpath>
        </iajc>
    </target>
</project>

HelloWorld模块的build.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<project name="Train" basedir="." default="build">
    <property name="build.dir" value="${basedir}/.build"/>
    <property name="build.classes.dir" value="${basedir}/.build/classes"/>
    <property name="main-class" value="oata.HelloWorld"/>
    <property name="lib.dir" value="lib"/>
    <property name="modules.dir" value=".."/>

    <path id="classpath">
        <fileset dir="${lib.dir}" includes="**/*.jar"/>
    </path>

    <target name="clean">
        <delete dir="${build.dir}"/>
    </target>

    <target name="build.aspects">
        <ant dir="${modules.dir}/AspectsModule" inheritall="true" />
    </target>

    <target name="init">
       <antcall target="build.aspects"/>
    </target>

    <target name="compile" depends="init">
        <mkdir dir="${build.classes.dir}"/>
        <javac srcdir="src" destdir="${build.classes.dir}" classpathref="classpath"/>
    </target>

    <target name="build" depends="compile">
        <mkdir dir="${build.dir}/jar"/>
        <jar destfile="${build.dir}/jar/${ant.project.name}.jar" basedir="${build.classes.dir}">
            <manifest>
                <attribute name="Main-Class" value="oata.HelloWorld"/>
            </manifest>
        </jar>
    </target>

    <target name="run" depends="build">
        <java fork="true" classname="${main-class}">
        <classpath>
            <path refid="classpath"/>
            <path location="${build.dir}/jar/${ant.project.name}.jar"/>
        </classpath>
        </java>
    </target>

</project> 

1 个答案:

答案 0 :(得分:0)

解决方案是在一个ant模块中添加所有内容:)