当自动化Eclipse的"Export as Feature"时,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,不是吗?什么是正确的配置?

到目前为止,您的配置看起来不错。然而,您目前只有一个功能的自动构建,但没有插件的。与Eclipse导出向导不同,eclipse-feature只处理feature.xml,它希望引用的插件在其他地方构建。

因此,您需要做的是建立一个Maven reactor,其中包括eclipse-featureeclipse-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>部分,其中包含这些项目的路径:

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

请注意,需要对路径进行调整,以便它们对于磁盘上的项目位置是正确的(这可能与Eclipse工作区中显示的不同)。路径需要是相对的,所以它们可能从../开始。

现在,您可以在父POM上触发Maven构建,该功能应该能够解析对插件的引用。在Eclipse中,您可以从pom.xml文件的上下文菜单触发Maven构建。或者,如果您还将父项目转换为Maven项目,您也可以从项目根的上下文菜单运行Maven构建。

最新更新