我试图在模块化( ajc设置)中使用Aspectj编译器OSGi。使用ajc的标准方法似乎是接受方面& java代码,并将其转化为一个JAR,包含-inpath、-aspectpath和-sourceroots中的所有类和资源。
我正试图从bnd组织一个OSGi可执行JAR。这个可执行jar包含一组需要编织的包。然而,在模块化系统中,边界是非常重要的。首先,清单通常包含与该包或多个扩展程序之一高度相关的信息。把所有的类都整理成一个大博客是行不通的。
因此,我把每一捆都分开编织。然而,输出却是杂乱无章的。我想导入这些以保持方面模块的适当模块。但是,使用注释编程模型,我注意到ajc正在修改方面模块,所以我也需要重写这些模块。这很好,但是由于我将每个包分别编织,我有一个问题:方面的编织是否取决于其他模块的编织?也就是说,对带注释的方面的修改是否取决于它所编织的类?
另一个问题是相同名称的资源会发生什么情况?因为我的-inpath只有一个JAR (包),所以我注意到输出中有正确的清单(META/MANIFEST.MF)。但是,如果-inpath由许多包组成,那么清单是什么?或者任何其他具有相同路径并因此重叠的资源?
最后一个问题是外部依赖。我理解acj想要看到整个世界,并将整个世界包含在输出罐中。但是,我必须排除包的外部依赖关系。是否有方法将JAR标记为: use,但不包括。有点像maven‘提供的’范围?
摘要:
-inpath和-sourceroots中围绕重叠资源路径的规则是什么?在我制作在Bndtools中的实现的同时更新了。
发布于 2021-03-03 01:50:35
@方面注释类的修改是否取决于应用到的目标?
如果您想100%确定您必须阅读AspectJ源代码,但我假设一个方面的字节代码独立于它的目标类,因为否则您不能单独编译方面,也不能构建方面库。
我可以将@方面注释的类编译成单独的JAR吗?
当然,见上文。
如何处理将在运行时提供的外部依赖项,因此必须从输出JAR中排除这些依赖项。
如果我正确理解这个问题,您可能希望在编译期间将它们放在类路径上,而不是在inpath上。
-inpath和-sourceroots中围绕重叠资源路径的规则是什么?
同样,您可能需要查看源代码。如果我是您,我会简单地假设选择顺序是未定义的,并且首先要确保没有重复。应该有Maven插件帮助您过滤想要的结果。
bndtools似乎与Eclipse有着密切的联系。作为一个Eclipse项目,AspectJ也是如此。也许你可以和AspectJ的维护者Andy联系起来。然而,他忙于白天的工作,几乎没有任何空闲的周期。我正在尽我所能地解除他的负担,但是OSGi是我的盲点之一,我几乎不知道AspectJ源代码。我是一个相当高级的用户。
https://stackoverflow.com/questions/66383166
复制相似问题