如何用Maven-Tycho打包多Eclipse产品并修改config.ini与p2路径
用Maven-Tycho实现多产品单归档打包与独立配置
核心问题修正:系统参数语法错误
你之前设置的参数存在语法问题,导致p2目录和配置区域未按预期生成:
- 错误写法:
-Declipse.p2.data.area==@config.dir/./p2→ 多了一个等号,正确应为-Declipse.p2.data.area=@config.dir/configuration_a1/p2(对应a1产品) - 错误写法:
-Dosgi.configuration.area=@config.dir/configuration_ab12/→ 路径需与产品一一对应,且@config.dir指向安装根目录的configuration文件夹,正确路径应为@config.dir/configuration_a1/
1. 配置.product文件实现独立启动与专属配置
针对每个.product文件,修改launching标签,指定专属exe/ini文件,同时配置正确的系统参数:
a1.product配置示例
<launcherArgs> <programArgs>-data @user.home/a1_workspace</programArgs> <vmArgs>-Dosgi.configuration.area=@config.dir/configuration_a1/ -Declipse.p2.data.area=@config.dir/configuration_a1/p2 -Dosgi.instance.area=@user.home/a1_instance</vmArgs> </launcherArgs> <launcher> <name>a1</name> <!-- 生成a1.exe和a1.ini --> <linuxLauncherArgs></linuxLauncherArgs> <macosxLauncherArgs></macosxLauncherArgs> </launcher>
a2.product配置示例
<launcherArgs> <programArgs>-data @user.home/a2_workspace</programArgs> <vmArgs>-Dosgi.configuration.area=@config.dir/configuration_a2/ -Declipse.p2.data.area=@config.dir/configuration_a2/p2 -Dosgi.instance.area=@user.home/a2_instance</vmArgs> </launcherArgs> <launcher> <name>a2</name> <!-- 生成a2.exe和a2.ini --> <linuxLauncherArgs></linuxLauncherArgs> <macosxLauncherArgs></macosxLauncherArgs> </launcher>
2. Tycho打包配置:合并公共资源,生成独立配置子目录
修改myproject.product.plugin/pom.xml,配置两个产品的构建目标,确保Tycho将公共的jre、plugins、features放在根目录,同时为每个产品生成独立配置子目录:
<build> <plugins> <plugin> <groupId>org.eclipse.tycho</groupId> <artifactId>tycho-p2-director-plugin</artifactId> <version>${tycho.version}</version> <executions> <!-- 构建a1产品 --> <execution> <id>materialize-a1</id> <goals> <goal>materialize-products</goal> </goals> <configuration> <products> <product> <id>com.myproject.a1.product</id> <!-- 对应a1.product里的唯一id --> <rootFolder>./</rootFolder> <!-- 公共资源放根目录 --> <configFolder>configuration/configuration_a1</configFolder> <!-- 指定配置子目录 --> </product> </products> </configuration> </execution> <!-- 构建a2产品 --> <execution> <id>materialize-a2</id> <goals> <goal>materialize-products</goal> </goals> <configuration> <products> <product> <id>com.myproject.a2.product</id> <!-- 对应a2.product里的唯一id --> <rootFolder>./</rootFolder> <!-- 复用根目录公共资源 --> <configFolder>configuration/configuration_a2</configFolder> <!-- 指定配置子目录 --> </product> </products> </configuration> </execution> <!-- 打包成单一归档 --> <execution> <id>archive-products</id> <goals> <goal>archive-products</goal> </goals> <configuration> <products> <product> <id>com.myproject.a1.product</id> </product> <product> <id>com.myproject.a2.product</id> </product> </products> <archiveFileName>myproject-combined.zip</archiveFileName> <!-- 最终归档文件名 --> </configuration> </execution> </executions> </plugin> </plugins> </build>
3. 确保Target文件依赖一致性
为保证plugins和features能完全共享,myproject.a1.target和myproject.a2.target的依赖版本必须完全一致。建议将公共依赖提取到基础target文件,让两个产品target继承,避免资源重复打包。
4. 验证最终归档结构
打包完成后,归档解压后的结构应符合预期:
myproject-combined/ ├── jre/ ├── plugins/ ├── features/ ├── configuration/ │ ├── configuration_a1/ │ │ ├── a1.ini │ │ └── p2/ │ └── configuration_a2/ │ ├── a2.ini │ └── p2/ ├── a1.exe └── a2.exe
关键注意事项
@config.dir在运行时指向安装根目录的configuration文件夹,配置路径需写全@config.dir/configuration_a1/,避免路径解析错误- Tycho的
tycho-p2-director-plugin版本需与项目使用的Tycho主版本一致,避免兼容性问题 - 每个.product文件的
id必须唯一,且与pom.xml中配置的产品id严格对应
内容的提问来源于stack exchange,提问作者mahesh bhagirath
相关产品推荐
相关产品推荐

