Tycho - 对Import-Package的“不满意的约束”

时间:2012-08-28 21:27:47

标签: maven osgi tycho

我刚开始使用第谷,我很早就被困住了。也许我误解了一些东西,以防万一,这就是我所期待的:我用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条目进行“神奇”翻译?或其他什么?

提前致谢。

3 个答案:

答案 0 :(得分:3)

是的,还有一些障碍需要采取。

简而言之,您需要为Tycho提供一个可以从中检索依赖关系的存储库。

更详细一点:

  • 您需要设置目标平台,并将其传递给Tycho。我猜你已经以某种方式设置了你的目标平台,否则Eclipse会抱怨没有找到Netty。
  • 确保您在工作区中共享目标平台,因此Tycho也可以访问它。
  • 告诉Tycho使用this
  • 等目标平台
  • Tycho兼容目标平台仅支持支持p2布局,因此没有普通目录。我不确定制作像这样的p2回购的最佳方式是什么,因为我问过while back。没有任何答案,但我确实在那里解释了什么(有点)对我有用。

希望它有所帮助,弗兰克

答案 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>