首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Aspectj,如何以模块化的方式使用ajc

Aspectj,如何以模块化的方式使用ajc
EN

Stack Overflow用户
提问于 2021-02-26 09:24:54
回答 1查看 177关注 0票数 1

我试图在模块化( ajc设置)中使用Aspectj编译器OSGi。使用ajc的标准方法似乎是接受方面& java代码,并将其转化为一个JAR,包含-inpath-aspectpath-sourceroots中的所有类和资源。

我正试图从bnd组织一个OSGi可执行JAR。这个可执行jar包含一组需要编织的包。然而,在模块化系统中,边界是非常重要的。首先,清单通常包含与该包或多个扩展程序之一高度相关的信息。把所有的类都整理成一个大博客是行不通的。

因此,我把每一捆都分开编织。然而,输出却是杂乱无章的。我想导入这些以保持方面模块的适当模块。但是,使用注释编程模型,我注意到ajc正在修改方面模块,所以我也需要重写这些模块。这很好,但是由于我将每个包分别编织,我有一个问题:方面的编织是否取决于其他模块的编织?也就是说,对带注释的方面的修改是否取决于它所编织的类?

另一个问题是相同名称的资源会发生什么情况?因为我的-inpath只有一个JAR (包),所以我注意到输出中有正确的清单(META/MANIFEST.MF)。但是,如果-inpath由许多包组成,那么清单是什么?或者任何其他具有相同路径并因此重叠的资源?

最后一个问题是外部依赖。我理解acj想要看到整个世界,并将整个世界包含在输出罐中。但是,我必须排除包的外部依赖关系。是否有方法将JAR标记为: use,但不包括。有点像maven‘提供的’范围?

摘要:

  • @方面注释类的修改是否取决于应用到的目标?
  • 我可以将@方面注释的类编译成单独的JAR吗?
  • 如何处理将在运行时提供的外部依赖项,因此必须从输出JAR中排除这些依赖项。
  • -inpath-sourceroots中围绕重叠资源路径的规则是什么?

在我制作在Bndtools中的实现的同时更新了

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-03 01:50:35

@方面注释类的修改是否取决于应用到的目标?

如果您想100%确定您必须阅读AspectJ源代码,但我假设一个方面的字节代码独立于它的目标类,因为否则您不能单独编译方面,也不能构建方面库。

我可以将@方面注释的类编译成单独的JAR吗?

当然,见上文。

如何处理将在运行时提供的外部依赖项,因此必须从输出JAR中排除这些依赖项。

如果我正确理解这个问题,您可能希望在编译期间将它们放在类路径上,而不是在inpath上。

-inpath-sourceroots中围绕重叠资源路径的规则是什么?

同样,您可能需要查看源代码。如果我是您,我会简单地假设选择顺序是未定义的,并且首先要确保没有重复。应该有Maven插件帮助您过滤想要的结果。

bndtools似乎与Eclipse有着密切的联系。作为一个Eclipse项目,AspectJ也是如此。也许你可以和AspectJ的维护者Andy联系起来。然而,他忙于白天的工作,几乎没有任何空闲的周期。我正在尽我所能地解除他的负担,但是OSGi是我的盲点之一,我几乎不知道AspectJ源代码。我是一个相当高级的用户。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66383166

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档