Tycho:对p2元数据进行分类

时间:2013-06-17 08:09:28

标签: eclipse maven eclipse-rcp tycho

Iam尝试使用Tycho生成分类的p2存储库。基本上有三个步骤(比较Eclipse documentation):

  1. 下载捆绑包
  2. 触发org.eclipse.equinox.p2.publisher.FeaturesAndBundlesPublisher
  3. 触发器org.eclipse.equinox.p2.publisher.CategoryPublisher
  4. 我在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>
    

    如果我手动执行这些步骤,则会发生相同的错误。我错过了什么?

1 个答案:

答案 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>