如何使用 Maven/Tycho 构建两个不同版本的 e4 RCP 应用程序?
How to build two different versions of an e4 RCP application with Maven/Tycho?
我有一个 e4 RCP 应用程序 A
。我用一个插件 B
扩展了这个应用程序,它通过片段添加了 GUI 功能。
我的项目结构如下所示:
- 申请
A
- 插件
B
- 目标平台项目
- 部署项目(带有 .product 文件)
到目前为止一切顺利。现在,我想部署我的 RCP 应用程序的两个版本。一种包括 B
,另一种不包括。我试图简单地添加第二个部署项目。这在 Eclipse IDE.
中工作正常
问题是我无法使用 Maven 构建项目。我收到以下错误:
[ERROR] Internal error: org.eclipse.tycho.p2.target.DuplicateReactorIUsException: Duplicate reactor project IUs.
[ERROR] plugin-b 0.1.qualifier => [D:\test\plugin-b, D:\test\plugin-b-repository]
[ERROR] -> [Help 1]
org.apache.maven.InternalErrorException: Internal error: org.eclipse.tycho.p2.target.DuplicateReactorIUsException: Duplicate reactor project IUs.
plugin-b 0.1.qualifier => [D:\test\plugin-b, D:\test\plugin-b-repository]
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:168)
at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537)
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:141)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)
Caused by: org.eclipse.tycho.p2.target.DuplicateReactorIUsException: Duplicate reactor project IUs.
plugin-b 0.1.qualifier => [D:\test\plugin-b, D:\test\plugin-b-repository]
at org.eclipse.tycho.p2.target.TargetPlatformFactoryImpl.getPreliminaryReactorProjectUIs(TargetPlatformFactoryImpl.java:369)
at org.eclipse.tycho.p2.target.TargetPlatformFactoryImpl.createTargetPlatform(TargetPlatformFactoryImpl.java:177)
at org.eclipse.tycho.p2.target.TargetPlatformFactoryImpl.createTargetPlatform(TargetPlatformFactoryImpl.java:126)
at org.eclipse.tycho.p2.target.TargetPlatformFactoryImpl.createTargetPlatform(TargetPlatformFactoryImpl.java:1)
at org.eclipse.tycho.p2.manager.ReactorRepositoryManagerImpl.computePreliminaryTargetPlatform(ReactorRepositoryManagerImpl.java:82)
at org.eclipse.tycho.p2.resolver.P2DependencyResolver.computePreliminaryTargetPlatform(P2DependencyResolver.java:215)
at org.eclipse.tycho.core.resolver.DefaultTychoResolver.resolveProject(DefaultTychoResolver.java:99)
at org.eclipse.tycho.core.maven.TychoMavenLifecycleParticipant.afterProjectsRead(TychoMavenLifecycleParticipant.java:75)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:274)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)
... 11 more
如何部署这两个不同的版本?
为您要实现的目标使用版本没有意义。对于版本,总是有旧版本和新版本,新版本意味着最终会取代旧版本。因此,如果您希望所有用户都使用更新版本的 RCP 应用程序(无论有无 B
),为什么还要构建旧版本?
这显然是一个反问:您希望您的用户能够从您的 RCP 应用程序的两个变体中进行选择。所以只需给它们一个不同的 ID(pom.xml 中的 artifactId
和产品文件中的 uid
),您的构建将 运行 正常。
我有一个 e4 RCP 应用程序 A
。我用一个插件 B
扩展了这个应用程序,它通过片段添加了 GUI 功能。
我的项目结构如下所示:
- 申请
A
- 插件
B
- 目标平台项目
- 部署项目(带有 .product 文件)
到目前为止一切顺利。现在,我想部署我的 RCP 应用程序的两个版本。一种包括 B
,另一种不包括。我试图简单地添加第二个部署项目。这在 Eclipse IDE.
问题是我无法使用 Maven 构建项目。我收到以下错误:
[ERROR] Internal error: org.eclipse.tycho.p2.target.DuplicateReactorIUsException: Duplicate reactor project IUs.
[ERROR] plugin-b 0.1.qualifier => [D:\test\plugin-b, D:\test\plugin-b-repository]
[ERROR] -> [Help 1]
org.apache.maven.InternalErrorException: Internal error: org.eclipse.tycho.p2.target.DuplicateReactorIUsException: Duplicate reactor project IUs.
plugin-b 0.1.qualifier => [D:\test\plugin-b, D:\test\plugin-b-repository]
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:168)
at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537)
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:141)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)
Caused by: org.eclipse.tycho.p2.target.DuplicateReactorIUsException: Duplicate reactor project IUs.
plugin-b 0.1.qualifier => [D:\test\plugin-b, D:\test\plugin-b-repository]
at org.eclipse.tycho.p2.target.TargetPlatformFactoryImpl.getPreliminaryReactorProjectUIs(TargetPlatformFactoryImpl.java:369)
at org.eclipse.tycho.p2.target.TargetPlatformFactoryImpl.createTargetPlatform(TargetPlatformFactoryImpl.java:177)
at org.eclipse.tycho.p2.target.TargetPlatformFactoryImpl.createTargetPlatform(TargetPlatformFactoryImpl.java:126)
at org.eclipse.tycho.p2.target.TargetPlatformFactoryImpl.createTargetPlatform(TargetPlatformFactoryImpl.java:1)
at org.eclipse.tycho.p2.manager.ReactorRepositoryManagerImpl.computePreliminaryTargetPlatform(ReactorRepositoryManagerImpl.java:82)
at org.eclipse.tycho.p2.resolver.P2DependencyResolver.computePreliminaryTargetPlatform(P2DependencyResolver.java:215)
at org.eclipse.tycho.core.resolver.DefaultTychoResolver.resolveProject(DefaultTychoResolver.java:99)
at org.eclipse.tycho.core.maven.TychoMavenLifecycleParticipant.afterProjectsRead(TychoMavenLifecycleParticipant.java:75)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:274)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)
... 11 more
如何部署这两个不同的版本?
为您要实现的目标使用版本没有意义。对于版本,总是有旧版本和新版本,新版本意味着最终会取代旧版本。因此,如果您希望所有用户都使用更新版本的 RCP 应用程序(无论有无 B
),为什么还要构建旧版本?
这显然是一个反问:您希望您的用户能够从您的 RCP 应用程序的两个变体中进行选择。所以只需给它们一个不同的 ID(pom.xml 中的 artifactId
和产品文件中的 uid
),您的构建将 运行 正常。