Tycho - 对Import-Package的"不满意的约束"

use*_*103 6 osgi tycho maven

我刚刚开始使用第谷,我很早就被困住了.也许我误解了一些东西,所以为了以防万一,这就是我所期待的:我用OSGi风格定义我的捆绑需求(即在MANIFEST.MFvia中Import-Package),而Tycho不知何故在运行中使用那些信息而不是我需要重新定义所有在Maven风格(即我不必将依赖项放在pom.xml中).

所以,我在Eclipse中使用m2eclipse插件,m2eclipse-tycho add和PDE插件创建了一个简单的Maven项目,并将以下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>
Run Code Online (Sandbox Code Playgroud)

在一些古怪的配置错误中挣扎,最后得到一个基本上空的项目(即没有源代码),在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)"
Run Code Online (Sandbox Code Playgroud)

我当时期待Tycho以某种方式神奇地弄清楚我需要Netty,因此就好像我在我的Maven pom.xml中插入了类似下面的内容:

<dependency>
    <groupId>org.jboss.netty</groupId>
    <artifactId>netty</artifactId>
    <version>3.5.1.Final</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

相反,所有发生的事情是我在Eclipse中有一个额外的错误,说:

Unsatisfied constraint: 'Import-Package: org.jboss.netty.channel;version="[3.5.1,4.0.0)"
Run Code Online (Sandbox Code Playgroud)

我不知道从哪里开始.对Tycho应该做什么有一些根本的误解吗?或者我还需要设置其他东西,以便能够从Import-Package条目MANIFEST.MF<dependency>pom.xml条目进行"神奇"的翻译吗?或者是其他东西?

提前致谢.

Fra*_*Lee 3

是的,还有一些障碍需要克服。

简而言之,您需要向第谷提供一个存储库,它可以从中检索依赖项。

更详细一点:

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

希望它有帮助,弗兰克