При автоматизиране на експортирането като функция на Eclipse, Maven/Tycho не вижда моя плъгин

Имам плъгин и проект за функции в работното си пространство. Когато експортирам функцията ръчно чрез File > Export As > Feature, всичко работи добре. Опитвам се да напиша скрипт за автоматично изграждане и експортиране на плъгини, за да се отърва от тази скучна работа. Преобразувах проект за функции в проект на Maven и попълних pom.xml с:

<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/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>

   <groupId>MyProject</groupId>
   <artifactId>NMGDBPluginFeature</artifactId>
   <version>1.0.0-SNAPSHOT</version>
   <packaging>eclipse-feature</packaging>

   <properties>
      <tycho-version>0.22.0</tycho-version>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  
   </properties>

   <repositories>
      <repository>
         <id>eclipse-luna</id>
         <layout>p2</layout>
         <url>http://download.eclipse.org/releases/luna</url>
      </repository>
   </repositories>

   <build>
      <plugins>
         <plugin>
            <groupId>org.eclipse.tycho</groupId>
            <artifactId>tycho-maven-plugin</artifactId>
            <version>${tycho-version}</version>
            <extensions>true</extensions>
         </plugin>
      </plugins>
   </build>

</project>

Скриптът обаче хвърля:

[ERROR] Cannot resolve project dependencies:
[ERROR]   Software being installed: NMGDBPluginFeature.feature.group 1.0.0.qualifier
[ERROR]   Missing requirement: NMGDBPluginFeature.feature.group 1.0.0.qualifier requires 'GDBFifoBlocks [1.0.0.gdbfifoblocks]' but it could not be found

Как може да стане това? Мислех, че pom.xml използва feature.xml на проекта, нали? Какво е правилна конфигурация?


person ScalewingedAcidicorn    schedule 26.02.2015    source източник


Отговори (1)


Засега конфигурацията ви изглежда добре. В момента обаче имате само автоматизирана компилация за вашата функция, но не и за приставката. За разлика от съветника за експортиране на Eclipse, eclipse-feature обработва само feature.xml - и очаква, че посочените добавки са изградени другаде.

Така че това, което трябва да направите, е да настроите Maven реактор, който включва както eclipse-feature, така и eclipse-plugin проект. Ето как да направите това:

  1. Направете текущия си pom.xml родителски POM: Променете опаковката на pom, адаптирайте artifactId към нещо, което има смисъл (напр. MyProject.parent), и преместете pom.xml в нов общ проект във вашето работно пространство.
  2. Добавете pom.xml в корена на проекта за функция:

    <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/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
    
      <parent>
        <groupId>MyProject</groupId>
        <artifactId>MyProject.parent</artifactId>
        <version>1.0.0-SNAPSHOT</version>
        <relativePath>relative/path/to/parent/project</relativePath>
      </parent>
    
      <artifactId>NMGDBPluginFeature</artifactId>
      <packaging>eclipse-feature</packaging>
    
    </project>
    
  3. Добавете друг pom.xml в корена на проекта на приставката, който е същият като този по-горе, с изключение на artifactId - това трябва да е същото като Bundle-SymbolicName на приставката - и packaging, което трябва да бъде eclipse-plugin.

  4. Включете плъгина и проектите за функции в Maven reactor, като добавите раздел <modules> в родителския POM с пътищата към тези проекти:

      <modules>
        <module>relative/path/to/plugin/project</module>
        <module>relative/path/to/feature/project</module>
      </modules>
    

Обърнете внимание, че пътищата трябва да бъдат адаптирани, така че да са правилни за местоположенията на проекта на диска (което може да е различно от показаното в работното пространство на Eclipse). Пътищата трябва да са относителни, така че вероятно започват с ../.

Сега можете да задействате изграждане на Maven на вашия родителски POM и функцията трябва да може да разреши препратката към вашия плъгин. В Eclipse можете да задействате изграждането на Maven от контекстното меню на файла pom.xml. Или, ако конвертирате родителския проект в проект на Maven, можете също да стартирате компилации на Maven от контекстното меню на корена на проекта.

person oberlies    schedule 27.02.2015
comment
Благодаря за изчерпателния и бърз отговор. Това не беше интуитивно. - person ScalewingedAcidicorn; 02.03.2015