Maven 使用不是Tycho构建包的库中的注释

Maven 使用不是Tycho构建包的库中的注释,maven,osgi,tycho,declarative-services,Maven,Osgi,Tycho,Declarative Services,我正在使用Tycho构建一个Eclipse插件,并将声明性服务用于我的OSGi服务。Eclipse有一个很好的DS文件编辑器,但它仍然是一个手动过程,这意味着它很慢而且容易出错 在非Tycho OSGi项目中,我可以使用maven scr插件生成这些注释。Tycho的问题是,我无法添加对org.apache.felix.annotationsjar的引用,因为它是 p2存储库中不存在 不是一捆 这些注释是用RetentionPolicy=CLASS定义的,因此它们不必在捆绑包中 我知道,但这

我正在使用Tycho构建一个Eclipse插件,并将声明性服务用于我的OSGi服务。Eclipse有一个很好的DS文件编辑器,但它仍然是一个手动过程,这意味着它很慢而且容易出错

在非Tycho OSGi项目中,我可以使用
maven scr插件
生成这些注释。Tycho的问题是,我无法添加对
org.apache.felix.annotations
jar的引用,因为它是

  • p2存储库中不存在
  • 不是一捆
这些注释是用
RetentionPolicy=CLASS
定义的,因此它们不必在捆绑包中

我知道,但这对我来说不起作用,因为注释jar不是一个包。理想情况下,我可以配置Tycho/Eclipse,以便在编译时查找额外的jar

如何获得Tycho和Eclipse所考虑的仅编译时的jar


更新:我尝试使用了
tycho编译器插件
extraClasspathElements
选项。这确实允许我调用
maven-scr插件
(请参阅)。然而,scr插件似乎无法访问这些类,因为构建失败了

[错误]无法在project org.apache.sling.ide.eclipse-core:/mnt/md/robert/git/sling ide tools/eclipse core/src/org/apache/sling/ide/eclipse/core/ServerUtil.java上执行目标org.apache.felix:maven scr插件:1.13.0:scr(生成scr描述符):无法加载编译的类:org.apache.sling.ide.eclipse.core.ServerUtil


您还可以看到

因为您使用的是Tycho/Eclipse,所以您可能希望使用“org.Eclipse.equinox.ds”而不是“org.apache.felix.annotations”。如果我理解正确,org.eclipse.equinox.ds是一个捆绑包。第谷常见问题解答也提到了这一点:

编辑:


编辑2:很多事情都变了。如果时间允许,我会更新我的答案。同时检查注释线程=)

我认为最好的办法是将建筑分为两步。 一个用于构建基于felix(scr/bnd)的捆绑包。结果将出现在本地maven存储库中,并且所有内容都已经与清单和组件XML捆绑在一起

由于注释仅在构建时处理,因此以下步骤不会有任何问题


第二步是构建基于tycho的工件(bundle、features、rcp、p2等),这些工件将在第一次构建中使用bundle。

感谢您的回复。在春分点使用DS实际上效果很好。它是手工创建描述符的,这很烦人。我想使用SCR注释()使用maven SCR插件()Ooo自动生成描述符。我想,与SCR/org.apache.felix.annotations相比,我误解了org.eclipse.equinox.ds的范围。这个答案帮助我取得了一些进步,但不幸的是,我仍然被卡住了。我会更新我的问题。顺便说一句,不要担心更新答案,当我有一个确定的解决方案时,我会自己做。如果可以的话,试着粘贴或要点你的POM。同时,试试这个:我认为有一个更大的问题,而不仅仅是在构建类路径中获得注释的可见性。您需要让PDE/Tycho实际调用注释处理器以从注释生成XML。据我所知,maven scr插件不会在Tycho构建中工作,当然也不会在PDE中工作,PDE总是试图避免生成任何类型的工件(除了.class文件…@NeilBartlett-你可能是对的,一旦我在构建中正确连接了maven scr插件,它就无法查找已编译的类。@NeilBartlett我很惊讶maven scr插件没有提供可以连接到tycho编译器配置中的javax.annotation.processing.Processor。(乍一看,ApacheFelix为其提供了自己的无关处理器接口)。有几件事。您希望将其附加到“编译”生命周期。不知道为什么。实际上就是这样,maven scr插件没有使用javac注释处理机制。相反,它使用ASM检查类,所以我不确定这将如何工作。。。我给你的建议对我很有用。maven捆绑包插件和maven scr插件创建清单,所有组件xmls和maven在本地存储库中安装捆绑包。在那之后,詹金斯开始使用先前生成的捆绑包的第谷建筑。你如何使用第谷生成的捆绑包?我使用一个目标文件,而tycho不支持目标文件中的本地目录(请参阅)。好吧,tycho可以使用安装在任何maven存储库中的包,包括本地存储库。但是为了让它们在我的目标中,我为每一组基于bnd的捆绑包创建了eclipse特性,并让jenkins创建并安装一个P2存储库,然后发布到web服务器中。