构建非自包含p2仓库:includeAllDependencies配置无效求助
includeAllDependencies=false未生效的问题 我之前也踩过一模一样的坑!明明设置了includeAllDependencies=false,结果第三方依赖还是被打包进了自己的p2仓库。结合你的场景(功能未显式依赖非自研插件),大概率是以下几个原因之一,你可以逐一排查:
1. 忽略了resolveDependencies参数
includeAllDependencies=false并不是万能的——如果你的tycho-p2-repository插件还默认开启了resolveDependencies=true,Tycho还是会主动解析所有传递依赖并塞进仓库里。这是最常见的问题!
你需要在仓库模块的pom.xml里同时配置这两个参数:
<plugin> <groupId>org.eclipse.tycho</groupId> <artifactId>tycho-p2-repository-plugin</artifactId> <version>${tycho-version}</version> <configuration> <includeAllDependencies>false</includeAllDependencies> <resolveDependencies>false</resolveDependencies> </configuration> </plugin>
2. Feature模块的includeDependencies配置冲突
如果你的p2仓库依赖了feature模块,而feature模块的tycho-feature-plugin设置了includeDependencies=true,那feature会先把所有依赖打包进去,仓库模块自然会继承这些内容。
检查feature模块的pom.xml,确保这个参数也是false:
<plugin> <groupId>org.eclipse.tycho</groupId> <artifactId>tycho-feature-plugin</artifactId> <version>${tycho-version}</version> <configuration> <includeDependencies>false</includeDependencies> </configuration> </plugin>
3. 自研插件的MANIFEST.MF依赖导致传递引入
虽然你没在feature里显式加非自研插件,但你的自研插件肯定依赖了Eclipse基础组件(比如org.eclipse.core.runtime)。如果这些依赖在MANIFEST.MF里标记为resolution:=mandatory(默认值),Tycho可能会默认把它们包含进来,除非你明确引导它从外部站点获取。
解决办法是:在仓库模块的配置里添加依赖的官方更新站点URL,让用户安装时自动从外部拉取依赖:
<configuration> <!-- 其他已有配置 --> <mirrorURLs> <mirrorURL>https://download.eclipse.org/releases/latest/</mirrorURL> </mirrorURLs> </configuration>
4. Target Platform的“过度包含”
如果你的target platform文件(比如.target)里直接包含了所有第三方插件,Tycho可能会认为这些是“本地可用”的,从而打包进仓库。建议你的target platform只保留构建所需的最小依赖集,不要把第三方插件标记为需要包含到输出中。
最后验证
构建完成后,你可以打开仓库目录下的content.xml文件,搜索非自研插件的ID(比如org.eclipse.core.runtime)。如果这些ID没有出现在<unit>标签里,说明配置生效了——用户安装你的更新站点时,Eclipse会自动从你指定的镜像URL下载所需依赖。
内容的提问来源于stack exchange,提问作者positron

