这是第谷社区经常被问到的一个问题:
我将我的 Eclipse RCP 构建从 [以前的技术,例如
eclipse-application
/PDE 无头构建/...] 迁移到使用打包类型使用 Tycho 构建产品的新推荐方式eclipse-repository
。现在我的发行版包含比以前更多的捆绑包。问题似乎是第谷引入了我的产品中包含的捆绑包的可选依赖项。我怎样才能防止这种情况?
这是第谷社区经常被问到的一个问题:
我将我的 Eclipse RCP 构建从 [以前的技术,例如
eclipse-application
/PDE 无头构建/...] 迁移到使用打包类型使用 Tycho 构建产品的新推荐方式eclipse-repository
。现在我的发行版包含比以前更多的捆绑包。问题似乎是第谷引入了我的产品中包含的捆绑包的可选依赖项。我怎样才能防止这种情况?
Tycho 的eclipse-repository
打包类型使用相同的技术(称为p2 )构建产品发行版,例如,在将新功能安装到 Eclipse IDE 时也使用这种技术。这样做的好处是,与其他构建技术不同,您不需要手动指定产品中所需捆绑包的所有依赖项,但 Tycho/p2 会自动为您包含它们。(这很重要,否则捆绑软件不会在运行时启动。)
另一方面,这也可能是一个缺点:Tycho/p2 还包括某些您希望从产品中排除的可选依赖项。
没有选项告诉 Tycho 不包含任何可选依赖项(因为 p2 没有此选项)。但是,您可以识别不需要的可选捆绑包,并使用以下配置将它们明确排除在目标平台之外:
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>target-platform-configuration</artifactId>
<version>${tycho-version}</version>
<configuration>
<filters>
<filter>
<type>eclipse-plugin</type>
<id>unwanted.bundle.id</id>
<removeAll />
</filter>
</filters>
</configuration>
</plugin>
然后产品构建将不再看到排除的捆绑包,并将从安装中忽略它。
注意:如果在添加上述配置后出现依赖解析错误,则说明某些东西非可选地需要捆绑包。尽管阅读起来有点棘手,但错误消息会告诉您从您正在构建的东西到已删除的包的依赖链。
我偶然发现了从我的 RCP 构建中排除 com.ibm.icu 的答案,并想发布更新。
Tycho 可以配置为暂时忽略可选依赖项,请参阅https://wiki.eclipse.org/Tycho/Release_Notes/0.14
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>target-platform-configuration</artifactId>
<version>${tychoVersion}</version>
<configuration>
<dependency-resolution>
<optionalDependencies>ignore</optionalDependencies>
</dependency-resolution>
</configuration>