2011-04-01 93 views
4

我无法理解AspectJ的编译时和加载时编织和搞清楚使用什么(以及如何使用AJC)编译并生成我的项目。AspectJ的 - 编译时间与加载时编织

这里是我的项目结构: -

  • TestProject:Java服务库。 其他一些 项目正在使用此项目。此项目不包含任何方面的 。

  • TestProject-方面:只包含
    方面,其建议在 TestProject几类。我没有使用
    AspectJ5注释风格和我所有的 joinpoints只是在方法
    执行当前。

我的问题:

  • AJC VS iajc以及他们如何 不同?
  • 是否有任何需要编织?

  • 请问像这样的工作?

编译TestProject-方面

<iajc> 
    sourceroots=${sources.dir} 
    destdir=${classes.dir} 
    classpath=${standard.compile.classpath} 
</iajc> 

编译TestProject

<iajc> 
    sourceroots=${sources.dir} 
    destdir=${classes.dir} 
    classpath=${standard.compile.classpath} 
    inpath=${[TestProject-Aspects]pkg.classpath} 
</iajc> 
  • 不要我必须使用javac呢? 我最初使用编译 TestProject?

回答

5

ajc和iajc是Eclipse自带的JDT编译器的扩展。因此,ajc和iajc将为Eclipse提供完全相同的纯Java字节代码(其中包含Oracle的javac的一些细微差异)。除了iajc是增量式(即iajc中的i),ajc和iajc基本相同。这意味着编译器会检查时间戳并尽可能做更智能的增量构建,并避免完整构建(就像在Eclipse中使用AJDT时一样)。除此功能外,它们基本上是相同的。在这里看到更多的信息:

http://www.eclipse.org/aspectj/doc/released/devguide/antTasks-iajc.html

如果项目不包含任何方面,采用AJC编译器是可选的。这些项目可以在包含方面的项目的路径中。要编译包含代码风格的方面,那么你需要使用ajc。

注释风格方面略有不同。如果仅为LTW使用注释样式,那么只要正确的aop.xml被创建,weaver在运行时就可用,那么您可以使用javac来编译它们。

但是,使用CTW编织的注记风格确实需要ajc。

在上面的特定情况下,只要它位于方面项目的入口处,就可以使用javac编译TestProject。这意味着您的TestProject的类文件将被重写并与您的方面项目中的类文件结合使用。或者,如果您使用的是LTW,那么您不需要将TestProject添加到任何inpath,并且您可以使用javac。但是,您必须在运行时为LTW设置您的应用程序。


编辑

要回答以下的评论:

是。您可以先使用ajc或iajc任务编译您的方面项目。然后,您可以使用iajc任务编译第二个纯Java项目,并将第一个项目的结果放在纵横比路径上。你完全不能使用javac。

蚂蚁的build.xml片断会是这个样子:

<project name="simple-example" default="compile" > 
    <taskdef 
     resource="org/aspectj/tools/ant/taskdefs/aspectjTaskdefs.properties"> 
    <classpath> 
     <pathelement location="${home.dir}/tools/aspectj/lib/aspectjtools.jar"/> 
    </classpath> 
    </taskdef> 

    <target name="compile" > 
    <iajc sourceroots="${home.dir}/TestProject-Aspects/src" 
     classpath="${home.dir}/tools/aspectj/lib/aspectjrt.jar" 
     destDir="${home.dir}/TestProject-Aspects/bin"/> 
    <iajc sourceroots="${home.dir}/TestProject/src" 
     classpath="${home.dir}/tools/aspectj/lib/aspectjrt.jar" 
     destDir="${home.dir}/TestProject/bin" 
     aspectPath="${home.dir}/TestProject-Aspects/bin"/> 
    </target> 
</project> 

在这里看到更多的细节上iajc

http://www.eclipse.org/aspectj/doc/released/devguide/antTasks-iajc.html

+0

您好安德鲁,我想先编译我的TestProject - 方面并使用它的编译输出来编译和构建我的TestProject。你能告诉我在这种情况下build.xml的样子吗?我可以使用javac编译我的ajc编译的TestProject-Aspects和TestProject吗?谢谢。 – soontobeared 2011-04-05 04:28:28

+0

谢谢。有用 – soontobeared 2011-04-19 17:50:35

相关问题