gpt4 book ai didi

AspectJ - 编译时与加载时编织

转载 作者:行者123 更新时间:2023-12-02 10:49:34 28 4
gpt4 key购买 nike

我无法理解aspectJ的编译时和加载时编织,也无法弄清楚使用什么(以及如何使用ajc)来编译和构建我的项目。

这是我的项目结构:-

  • TestProject:一个ja​​va服务库。这正被其他一些人使用项目。该项目不包含任何方面。

  • TestProject-Aspects:仅包含
    为一些类(class)提供建议的方面测试项目。我没有使用
    AspectJ5注释风格和我所有的连接点就在方法上
    目前正在执行。

我的问题:

  • ajc 与 iajc 以及它们怎么样不同的?
  • 需要编织吗?

  • 这样的东西有用吗?

编译测试项目方面

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

编译测试项目

<iajc>
sourceroots=${sources.dir}
destdir=${classes.dir}
classpath=${standard.compile.classpath}
inpath=${[TestProject-Aspects]pkg.classpath}
</iajc>
  • 我根本不需要使用 javac 吗?我最初用它来编译测试项目?

最佳答案

ajc和iajc是Eclipse自带的JDT编译器的扩展。因此,ajc 和 iajc 将为纯 Java 生成与 Eclipse 完全相同的字节代码(其中与 Oracle 的 javac 存在一些细微差别)。

ajc 和 iajc 基本相同,只是 iajc 是增量的(即 iajc 中的 i)。这意味着编译器会检查时间戳并在可能的情况下进行更智能的增量构建,并避免完整构建(就像在 eclipse 内使用 AJDT 时一样)。除了此功能之外,它们本质上是相同的。请参阅此处了解更多信息:

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

如果项目不包含切面,则可以选择使用 ajc 编译器。这些项目可以位于包含方面的项目的路径上。要编译包含代码风格方面的内容,则需要使用 ajc。

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

但是,CTW 编织的注释样式确实需要 ajc。

在上面的特定情况下,您可以使用 javac 编译 TestProject,只要它位于方面项目的 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>

有关 iajc 的更多详细信息,请参阅此处:

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

关于AspectJ - 编译时与加载时编织,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5516937/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com