【问题标题】:Eclipse RCP built by Tycho includes unwanted optional dependenciesTycho 构建的 Eclipse RCP 包含不需要的可选依赖项
【发布时间】:2012-09-04 12:49:40
【问题描述】:
这是第谷社区经常被问到的一个问题:
我从 [以前的技术 迁移了我的 Eclipse RCP 构建,例如eclipse-application/ PDE headless build / ...] 到新的recommended way of building products with Tycho 使用包装类型eclipse-repository。现在我的发行版包含比以前更多的捆绑包。
问题似乎是 Tycho 引入了我的产品中包含的捆绑包的可选依赖项。我怎样才能防止这种情况发生?
【问题讨论】:
标签:
dependency-management
p2
tycho
【解决方案1】:
Tycho 的 eclipse-repository 封装类型 builds product distributions 与您在将新功能安装到 Eclipse IDE 时也使用的相同技术(称为 p2)。这样做的好处是,与其他构建技术不同,您不需要手动指定产品中所需捆绑包的所有依赖项,但 Tycho/p2 会自动为您包含它们。 (这很重要,否则捆绑软件将不会在运行时启动。)
另一方面,这也可能是一个缺点:Tycho/p2 还包含某些您希望从产品中排除的可选依赖项。
没有选项告诉 Tycho 不包含任何可选依赖项(因为 p2 没有此选项)。但是,您可以识别不需要的可选捆绑包,并使用以下配置将它们从target platform 中明确排除:
<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>
然后产品构建将无法再看到排除的捆绑包,并将从安装中忽略它。
注意:如果您在添加上述配置后遇到依赖解析错误,则有一些东西非可选地需要捆绑包。尽管阅读起来有点棘手,但错误消息会告诉您从您正在构建的东西到已删除包的依赖链。
【解决方案2】:
我偶然发现了从我的 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>