使用来自库的注释,该库不是Tycho构建中的包

时间:2013-07-24 13:09:57

标签: maven osgi tycho declarative-services

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

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

  • 不存在于p2存储库中
  • 不是捆绑

这些注释使用RetentionPolicy = CLASS定义,因此它们不必捆绑在一起。

我知道dependency on pom-first artifacts,但它对我不起作用,因为注释jar不是一个包。理想情况下,我可以在编译时配置Tycho / Eclipse以寻找额外的jar。

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


更新:我尝试使用extraClasspathElements的{​​{1}}选项。这确实允许我调用tycho-compiler-plugin(请参阅the current pom.xml)。但是,似乎scr插件无法访问类,因为构建失败并带有

  

[错误]无法在项目org.apache.sling.ide.eclipse-core:/ mnt上执行目标org.apache.felix:maven-scr-plugin:1.13.0:scr(generate-scr-descriptor) /md/robert/git/sling-ide-tools/eclipse-core/src/org/apache/sling/ide/eclipse/core/ServerUtil.java:无法加载编译的类:org.apache.sling.ide.eclipse .core.ServerUtil

您还可以看到full build log

2 个答案:

答案 0 :(得分:1)

由于您使用的是Tycho / Eclipse,因此您可能希望使用“org.eclipse.equinox.ds”而不是“org.apache.felix.annotations”。如果我理解正确,org.eclipse.equinox.ds是一个包。 Tycho FAQ也提到了这一点:

http://wiki.eclipse.org/Tycho/FAQ#How_to_add_a_undeclared_dependency.3F__.28e.g..2C_OSGi_declarative_service.29

编辑:

http://eclipse.org/tycho/sitedocs/tycho-compiler-plugin/compile-mojo.html#extraClasspathElements

EDIT2:很多都改变了。如果时间允许,我会更新我的答案。检查同时评论线程=)

答案 1 :(得分:0)

我认为你能做的最好的事情就是分两步将你的建筑分开。 一个用于构建基于felix(scr / bnd)的捆绑包。结果将在本地maven存储库中,并且所有存储库和组件xmls都已捆绑在一起。

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

第二步是构建基于tycho的工件(包,功能,rcp,p2等),这些工件将使用第一个构建中的包。