6

我刚刚开始使用第谷,而且我在早期阶段被难住了。也许我误解了一些东西,所以以防万一,这就是我所期待的:我以 OSGi 风格(即在MANIFEST.MFvia中Import-Package)定义我的捆绑包的需求,并且 Tycho 以某种方式即时使用该信息而不是我需要重新定义它以 Maven 风格(即我不必将依赖项放在 pom.xml 中)。

所以,我做了一个简单的 Maven 项目,在 Eclipse 中使用 m2eclipse 插件、m2eclipse-tycho 插件和 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。我使用 Netty 的 3.5.1.Final 版本,所以我编辑了我的 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)"

我不知道从这里去哪里。我对第谷应该做什么有一些基本的误解吗?还是我必须设置其他东西才能使其能够将条目“神奇”转换Import-PackageMANIFEST.MFpom.xml<dependency>条目?或者是其他东西?

提前致谢。

4

3 回答 3

3

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

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

更详细一点:

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

希望它有帮助,弗兰克

于 2012-08-28T22:35:45.887 回答
3

您的理解已经很好,但是缺少一个小而重要的部分:与 Maven 不同,Tycho 中没有规范的默认存储库(如“中央”)。您需要配置 Tycho 搜索解决 OSGi 依赖项的位置。

这个搜索范围在 Tycho中称为“目标平台”。不同的方法,因此在目标平台中包含工件;最简单的方法是在 POM 中使用附加<layout>p2</layout>属性配置包含依赖项的 p2 存储库(假设您知道包含依赖项的 p2 存储库。)

于 2012-08-29T10:04:09.000 回答
0

也可以通过额外的依赖配置将丢失的包直接添加到失败的包中:

<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>
于 2014-02-25T10:41:44.580 回答