Tycho构建过程中-vmargs参数丢失问题求助
解决Tycho构建RCP产品时
-vmargs丢失的问题 我之前也碰到过一模一样的问题,Tycho在处理RCP产品的启动参数时确实有个容易踩的坑,咱们一步步来分析和解决:
问题根源
Tycho的tycho-p2-director-plugin在生成产品的INI文件时,会自动区分程序参数和VM参数,并且会负责在INI里正确插入-vmargs分隔符。如果你的产品配置里把-vmargs和VM参数(比如--add-modules=ALL-SYSTEM)混在了程序参数里,Tycho会把-vmargs当成普通的程序参数处理,甚至直接丢弃它,导致VM参数被错误地放在了程序参数区域,失去了作用。
解决方案
1. 修正产品文件(.product)的参数配置
打开你的RCP产品文件,找到Launching标签页:
- 在Program Arguments里只填程序参数:
-clean -persistState false - 在VM Arguments里单独填VM参数:
--add-modules=ALL-SYSTEM
这样配置后,Tycho在构建时会自动生成正确的INI文件,自动加上-vmargs并把VM参数放在它后面。
2. 在pom.xml中显式指定参数(可选,用于覆盖产品文件配置)
如果需要通过Maven配置统一控制参数,可以在tycho-p2-director-plugin的配置里明确区分两类参数:
<plugin> <groupId>org.eclipse.tycho</groupId> <artifactId>tycho-p2-director-plugin</artifactId> <version>${tycho-version}</version> <executions> <execution> <id>materialize-products</id> <goals> <goal>materialize-products</goal> </goals> </execution> <execution> <id>archive-products</id> <goals> <goal>archive-products</goal> </goals> </execution> </executions> <configuration> <products> <product> <id>${project.artifactId}</id> <attachId>${project.artifactId}</attachId> <archiveFileName>${archiveName}</archiveFileName> <!-- 程序参数 --> <programArguments>-clean -persistState false</programArguments> <!-- VM参数,不需要加-vmargs --> <vmArguments>--add-modules=ALL-SYSTEM</vmArguments> </product> </products> </configuration> </plugin>
3. 升级Tycho版本
如果用的是较旧的Tycho版本(比如1.5.0及以下),可能存在参数处理的bug。建议升级到1.7.0以上的稳定版本,这类参数解析的问题在新版本里已经被修复。
验证结果
修改后重新构建,生成的INI文件应该会变成这样:
-startup plugins/org.eclipse.equinox.launcher_1.4.0.v20161219-1356.jar --launcher.library plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.551.v20171108-1834 -clean -persistState false -vmargs --add-modules=ALL-SYSTEM
这样--add-modules就会被正确识别为VM参数,应用也能正常启动了。
内容的提问来源于stack exchange,提问作者Stefan S.
相关产品推荐
相关产品推荐

