我希望能够在Tycho构建中使用遗留的Eclipse RCP应用程序中的大量捆绑包。这些捆绑包还没有p2存储库,所以我创建了一个。这已经很好用,除了需要在安装中解压缩的bundle仍然作为JAR安装。
我创建p2存储库的第一种方法是将bundle部署到Maven存储库,然后使用pomDependency =考虑将它们包含在eclipse-feature
和eclipse-repository
中。但是,Tycho忽略了feature.xml中的unpack
属性,因此这不起作用(参见此documentation)。此问题的建议解决方案是在包含的捆绑包的清单中添加Eclipse-BundleShape: dir
。我可以做到 - 但由于我有数百个捆绑,这将是一个相当大的努力。
然后,我获得了使用"功能和捆绑发布者应用程序"的提示:使用此应用程序,同时在p2存储库中创建功能和捆绑工件,因此有关的信息可以将bundle形状从feature.xml复制到相应的包中。
然而,这仍然不起作用:虽然我已为其中一个发布的捆绑设置了unpack="true"
,但该捆绑包没有
<instruction key='zipped'>
true
</instruction>
在p2存储库的content.xml中,因此在安装时不会解压缩。我有什么想法可能做错了吗?任何其他想法如何使这个工作?
这是我的 pom.xml ,用于创建p2存储库:
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycorp.xyz.expose</groupId>
<artifactId>com.mycorp.xyz.expose.orbit</artifactId>
<version>1.0.0</version>
<dependencies>
<dependency>
<groupId>com.mycorp.xyz.expose</groupId>
<artifactId>com.mycorp.somelib</artifactId>
<version>6.40.0</version>
</dependency>
<!-- and many more... -->
</dependencies>
<build>
<outputDirectory>${project.build.directory}/artifacts</outputDirectory>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.9</version>
<executions>
<execution>
<id>copy</id>
<phase>process-resources</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/artifacts/plugins</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.eclipse.tycho.extras</groupId>
<artifactId>tycho-p2-extras-plugin</artifactId>
<version>0.21.0</version>
<executions>
<execution>
<id>publish-features-and-bundles</id>
<phase>compile</phase>
<goals>
<goal>publish-features-and-bundles</goal>
</goals>
<configuration>
<sourceLocation>${project.build.directory}/artifacts</sourceLocation>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>tycho-p2-repository-plugin</artifactId>
<version>0.21.0</version>
<executions>
<execution>
<id>assemble</id>
<phase>package</phase>
<goals>
<goal>verify-repository</goal>
<goal>archive-repository</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
项目中唯一的其他文件是src / main / resources / features`中的以下 feature.xml :
<?xml version="1.0" encoding="UTF-8"?>
<feature
id="com.mycorp.xyz.expose.orbit"
label="..."
version="1.0.0">
<plugin
id="com.mycorp.somelib"
download-size="0"
install-size="0"
version="0.0.0"
unpack="true"/>
<!-- and many more... -->
</feature>
答案 0 :(得分:1)
我已经调试了在所述设置中运行的功能和捆绑包发布者应用程序,结果发布者没有将feature.xml中的unpack="true"
与捆绑包相关联因为版本不匹配。
因此,您需要在feature.xml中提供引用的捆绑包的实际OSGi版本,而不是0.0.0
。没有像普通Tycho构建那样的自动替换。所以feature.xml会例如看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>
<feature
id="com.mycorp.xyz.expose.orbit"
label="..."
version="1.0.0">
<plugin
id="com.mycorp.somelib"
download-size="0"
install-size="0"
version="6.40.0.140829051758"
unpack="true"/>
</feature>
然后,在安装时按预期解压缩捆绑包。