2013-06-17 5 views
2

Iam пытается сгенерировать категоризированный репозиторий p2 с помощью Tycho. Есть в основном три шага, чтобы сделать (сравните Eclipse documentation):Tycho: классифицировать метаданные p2

  1. Скачать Связки
  2. Trigger org.eclipse.equinox.p2.publisher.FeaturesAndBundlesPublisher
  3. Trigger org.eclipse.equinox.p2.publisher.CategoryPublisher

, который я сконфигурировал в 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

Хотя теоретически можно вызвать низкоуровневые действия p2 через Tycho, я бы не рекомендовал этот подход для проблемы, которую вы пытаетесь решить.

Артефакт уже доступен в репозитории Maven, поэтому вы можете легко добавить его в target platform Tycho build через pomDependencies=consider. Тогда вы можете, например, построить репозиторий p2 с артефактом, используя тип упаковки Tycho eclipse-repository.

Вам понадобится следующая 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> 
+0

Параметр '' синтаксис в настоящее время не поддерживается в Tycho, и никто еще не запросил (https://bugs.eclipse.org/bugs/enter_bug.cgi?product=Tycho). Может быть, вы хотите предложить это усовершенствование? – oberlies

+0

Хмм, это не сработает с «Недостающее требование: org.apache.cxf.bundle 2.7.5 требует« package com.ibm.wsdl.util.xml 0.0.0 », но он не может быть найден». @Achim: У вас есть какая-то подсказка, откуда этот пакет должен появиться во время выполнения? – oberlies

+0

Пакет исходит из [org.apache.servicemix.bundles.wsdl4j] (http://search.maven.org/#artifactdetails%7Corg.apache.servicemix.bundles%7Corg.apache.servicemix.bundles.wsdl4j%7C1. 6.3_1% 7Cbundle). Спасибо за подсказку, я дам ей попытку и сообщите, работает ли она для меня. – Achim