soo*_*red 5 aspectj compile-time-weaving load-time-weaving
我无法理解aspectJ的编译时和加载时编织,并弄清楚要使用什么(以及如何使用ajc)来编译和构建我的项目.
这是我的项目结构: -
TestProject:一个java服务库.其他一些项目正在使用它.该项目不包含任何方面.
TestProject-Aspects:包含
在TestProject中为几个类提供建议的方面.我没有使用
AspectJ5注释样式,我所有的连接点都只是
当前的方法执行.
我的问题:
是否需要编织?
这样的事情会起作用吗?
编译TestProject-Aspects
<iajc>
sourceroots=${sources.dir}
destdir=${classes.dir}
classpath=${standard.compile.classpath}
</iajc>
Run Code Online (Sandbox Code Playgroud)
编译TestProject
<iajc>
sourceroots=${sources.dir}
destdir=${classes.dir}
classpath=${standard.compile.classpath}
inpath=${[TestProject-Aspects]pkg.classpath}
</iajc>
Run Code Online (Sandbox Code Playgroud)
ajc和iajc是Eclipse附带的JDT编译器的扩展.因此,ajc和iajc将为Eclipse生成与纯Java完全相同的字节代码(其中包含与Oracle的javac的一些细微差别).
ajc和iajc基本相同,只是iajc是增量的(这是iajc中的i).这意味着编译器会检查时间戳,并在可能的情况下执行更智能的增量构建,并避免完全构建(就像在eclipse中使用AJDT时一样).除了这个功能,它们基本相同.浏览此处获取更多信息:
http://www.eclipse.org/aspectj/doc/released/devguide/antTasks-iajc.html
如果项目不包含任何方面,则使用ajc编译器是可选的.这些项目可以位于包含方面的项目的inpath中.要编译包含代码样式方面,那么您需要使用ajc.
注释风格方面有点不同.如果仅对LTW使用注释样式,则只要创建了正确的aop.xml,就可以使用javac来编译它们,而weaver在运行时可用.
但是,CTW编织的注释样式确实需要ajc.
在上面的特定情况下,您可以TestProject使用javac进行编译,只要它位于Aspect项目的inpath中即可.这意味着将重新编写TestProject的类文件,并将其与方面项目中的类文件结合使用.
或者,如果您使用LTW,那么您不需要将您添加TestProject到任何inpath,您可以使用javac.但是,您必须在运行时为LTW设置应用程序.
编辑
要回答以下评论:
是.您可以先使用ajc或iajc任务编译方面项目.然后,您还可以使用iajc任务编译第二个纯Java项目,另外还可以将第一个项目的结果放在方面路径上.你根本不能使用javac.
ant 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>
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参见此处iajc:
http://www.eclipse.org/aspectj/doc/released/devguide/antTasks-iajc.html
| 归档时间: |
|
| 查看次数: |
13547 次 |
| 最近记录: |