我正在构建一个产品(在eclipse-repository模块中),其中包含几个通过p2.inf文件创建的可安装单元配置其插件的功能。
只要我对tycho-p2-director-plugin的targetPlatform
配置参数使用默认值source
,这就有效。 AFAIK这使得导演可以访问<project_dir>/target/targetPlatformRepository/context.xml
的p2元数据和本地Maven存储库中的工件。
由于我想修改一些捆绑包,因此我将source
参数更改为repository
。这使得导演在<project_dir>/target/repository
中使用生成的存储库中的工件和元数据并打破我的构建; - )
<project_dir>/target/repository/content.jar
似乎缺少通过p2.inf创建的可安装单元,而<project_dir>/target/targetPlatformRepository/context.xml
已完成。例如。以下单位仅包含在后者中:
<unit id='configure.org.sample.bundle' ...>
<!-- config -->
</unit>
如何配置构建以在project/repository/content.jar
?
以下是我的p2.inf文件的片段:
# org.sample.bundle
requires.0.namespace=org.eclipse.equinox.p2.iu
requires.0.name=configure.org.sample.bundle
requires.0.greedy=true
units.0.id=configure.org.sample.bundle
units.0.version=1.0.0
units.0.provides.1.namespace=org.eclipse.equinox.p2.iu
units.0.provides.1.name=configure.org.sample.bundle
units.0.provides.1.version=1.0.0
units.0.instructions.install=org.eclipse.equinox.p2.touchpoint.eclipse.installBundle(bundle:${artifact});
units.0.instructions.configure=org.eclipse.equinox.p2.touchpoint.eclipse.setStartLevel(startLevel:2); org.eclipse.equinox.p2.touchpoint.eclipse.markStarted(started:true);
units.0.hostRequirements.1.namespace=osgi.bundle
units.0.hostRequirements.1.name=org.sample.bundle
units.0.hostRequirements.1.greedy=false
units.0.hostRequirements.2.namespace=org.eclipse.equinox.p2.eclipse.type
units.0.hostRequirements.2.name=bundle
units.0.hostRequirements.2.range=[1.0.0,2.0.0)
units.0.hostRequirements.2.greedy=false
units.0.requires.1.namespace=osgi.bundle
units.0.requires.1.name=org.sample.bundle
units.0.requires.1.greedy=false
来自Tycho的错误:
Cannot complete the install because one or more required items could not be found.
Software being installed: sample 1.0.0.201308060715 (sample.product 1.0.0.201308060715)
Missing requirement: Sample Feature 1.0.0.201308060715 (sample.feature.feature.group
1.0.0.201308060715) requires 'configure.org.sample.bundle 0.0.0' but it could not be found
答案 0 :(得分:2)
创建产品安装时,p2 director需要解决产品的所有过渡依赖关系。但是,默认情况下,在eclipse-repository模块(通常位于target/repository/
)中构建的p2存储库仅聚合包含的内容。
由于您说在target/repository/
p2存储库中缺少通过p2.inf创建的单元,因此它们可能未包含在功能中,但仅作为依赖项引用。虽然您也可以更改p2.inf以生成包含,但这可能不是最简单的解决方案。
相反,只需配置tycho-p2-repository-plugin即可聚合包含但包含所有依赖关系:
<build>
<plugins>
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>tycho-p2-repository-plugin</artifactId>
<version>${tycho-version}</version>
<configuration>
<includeAllDependencies>true</includeAllDependencies>
</configuration>
</plugin>
</plugins>
</build>
然后,如果直接从目标平台或聚合的p2存储库安装tycho-p2-director-plugin,则无关紧要。