Iam尝试使用Tycho生成分类的p2存储库。基本上有三个步骤(比较Eclipse documentation):
我在maven pom文件中配置。步骤1和2表现良好,而步骤3失败:
Status ERROR: this code=0 publishing result null children=[Status ERROR: org.eclipse.equinox.p2.updatesite code=0 Error
generating category xml action. org.eclipse.equinox.p2.core.ProvisionException: Error reading update site file:/<path>/category.xml.]
这是我的pom.file
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001 XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>demo</groupId>
<artifactId>simple-p2-repository</artifactId>
<version>0.1.0-SNAPSHOT</version>
<name>Simple p2 repository build</name>
<packaging>pom</packaging>
<properties>
<tycho-version>0.18.0</tycho-version>
</properties>
<build>
<plugins>
<!-- Step 1 -->
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-bundles-for-publishing</id>
<phase>process-resources</phase>
<goals>
<goal>copy</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-bundle</artifactId>
<version>2.7.5</version>
</artifactItem>
</artifactItems>
<outputDirectory>${project.basedir}/target/source/plugins</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<!-- Step 2 -->
<plugin>
<groupId>org.eclipse.tycho.extras</groupId>
<artifactId>tycho-p2-extras-plugin</artifactId>
<version>${tycho-version}</version>
<executions>
<execution>
<phase>prepare-package</phase>
<goals>
<goal>publish-features-and-bundles</goal>
</goals>
</execution>
</executions>
<configuration>
<compress>true</compress>
<append>true</append>
<publishArtifacts>true</publishArtifacts>
</configuration>
</plugin>
<!-- Step3 -->
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>tycho-p2-plugin</artifactId>
<version>${tycho-version}</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>category-p2-metadata</goal>
</goals>
</execution>
</executions>
<configuration>
<target>${basedir}/target/repository</target>
<categoryDefinition>${basedir}/category.xml</categoryDefinition>
</configuration>
</plugin>
</plugins>
</build>
</project>
我的category.xml
<?xml version="1.0" encoding="UTF-8"?>
<site>
<category-def name="all" label="Maven osgi-bundles"/>
<iu>
<category name="all"/>
<query>
<expression type="match">providedCapabilities.exists(p | p.namespace == 'osgi.bundle')</expression>
</query>
</iu>
</site>
如果我手动执行这些步骤,则会发生相同的错误。我错过了什么?
答案 0 :(得分:0)
虽然理论上可以通过Tycho调用低级别的p2动作,但我不建议你采用这种方法解决你想要解决的问题。
该工件已在Maven存储库中提供,因此您可以通过pomDependencies=consider
轻松将其添加到Tycho构建的target platform。然后,您可以使用Tycho的打包类型eclipse-repository
构建包含工件的p2存储库。
您需要以下POM配置......
...
<packaging>eclipse-repository</packaging>
<dependencies>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-bundle</artifactId>
<version>2.7.5</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>target-platform-configuration</artifactId>
<version>${tycho-version}</version>
<configuration>
<pomDependencies>consider</pomDependencies>
</configuration>
</plugin>
</plugins>
</build>
...以及一个category.xml,它明确列出了您要包含的包:
<?xml version="1.0" encoding="UTF-8"?>
<site>
<bundle id="org.apache.cxf.bundle" version="0.0.0">
<category name="all"/>
</bundle>
<category-def name="all" label="Maven osgi-bundles"/>
</site>