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

У меня есть плагин и функциональный проект в моей рабочей области. Когда я экспортирую функцию вручную через «Файл»> «Экспортировать как»> «Функция», все работает хорошо. Я пытаюсь написать скрипт автоматического создания и экспорта плагинов, чтобы избавиться от этой рутинной работы. Я преобразовал функциональный проект в проект 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, добавив раздел <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