我刚开始使用第谷,我很早就被困住了。也许我误解了一些东西,以防万一,这就是我所期待的:我用OSGi风格定义我的包的需求(即MANIFEST.MF
通过Import-Package
),而Tycho以某种方式使用该信息苍蝇而不是我需要以Maven风格重新定义它(即我不必将依赖项放在pom.xml中)。
所以,我在Eclipse中创建了一个简单的Maven项目,其中包含m2eclipse插件,m2eclipse-tycho add和PDE插件,并将以下Tycho内容放入pom中:
<properties>
<tycho-version>0.15.0</tycho-version>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>tycho-maven-plugin</artifactId>
<version>${tycho-version}</version>
<extensions>true</extensions>
</plugin>
</plugins>
</build>
在一些古怪的配置错误中挣扎,最后得到了一个基本上空的项目(即没有源代码),在Eclipse中没有给出任何错误或警告。然后我从另一个项目中复制了我的源代码,并且(正如预期的那样)由于缺少依赖性而得到了一堆编译器错误。第一个是来自org.jboss.netty.channel的AbstractChannel。我使用版本3.5.1.Final of Netty,所以我编辑了我的MANIFEST.MF以包含:
Import-Package: org.jboss.netty.channel;version="[3.5.1,4)"
然后我期待Tycho以某种方式神奇地弄清楚我需要Netty,因此就好像我在我的Maven pom.xml中插入了类似下面的内容:
<dependency>
<groupId>org.jboss.netty</groupId>
<artifactId>netty</artifactId>
<version>3.5.1.Final</version>
</dependency>
相反,所有发生的事情是我在Eclipse中有一个额外的错误,说:
Unsatisfied constraint: 'Import-Package: org.jboss.netty.channel;version="[3.5.1,4.0.0)"
我不知道从哪里开始。对Tycho应该做什么有一些基本的误解吗?或者我还需要设置其他内容,以便能够从Import-Package
中的MANIFEST.MF
条目到<dependency>
pom.xml条目进行“神奇”翻译?或其他什么?
提前致谢。
答案 0 :(得分:3)
是的,还有一些障碍需要采取。
简而言之,您需要为Tycho提供一个可以从中检索依赖关系的存储库。
更详细一点:
希望它有所帮助,弗兰克
答案 1 :(得分:3)
你的理解已经相当不错了,但是有一个小的但必不可少的部分缺失:与Maven不同,Tycho中有没有规范的默认存储库(如“中央”)。您需要配置Tycho搜索解析OSGi依赖项的位置。
此搜索范围在Tycho中称为“target platform”。有different ways so include artifacts in the target platform;最简单的方法是使用额外的<layout>p2</layout>
属性配置包含POM中的依赖项的p2存储库(假设您知道包含依赖项的p2存储库。)
答案 2 :(得分:0)
还可以通过额外的依赖关系配置将缺失的bundle直接添加到失败的bundle:
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>target-platform-configuration</artifactId>
<version>${tycho.version}</version>
<configuration>
<dependency-resolution>
<extraRequirements>
<requirement>
<type>eclipse-plugin</type>
<id>org.eclipse.jface.text</id>
<versionRange>0.0.0</versionRange>
</requirement>
</extraRequirements>
</dependency-resolution>
</configuration>
</plugin>