自动化 Eclipse 的 "Export as Feature" 时,Maven/Tycho 看不到我的插件
When automating Eclipse's "Export as Feature", Maven/Tycho doesn't see my plugin
我的工作区中有一个插件和一个功能项目。当我通过文件 > 导出为 > 功能手动导出功能时,一切正常。我正在尝试编写一个自动插件构建和导出脚本来摆脱这个苦差事。我将功能项目转换为 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 反应器,其中包括一个 eclipse-feature
和一个 eclipse-plugin
项目。以下是您的操作方法:
- 使当前的 pom.xml 成为父 POM:将包装更改为
pom
,将 artifactId
调整为有意义的内容(例如 MyProject.parent
),然后移动pom.xml 在您的工作区中创建一个新的通用项目。
在功能项目的根目录添加一个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>
在插件项目的根目录下再添加一个pom.xml,除artifactId
外,和上面的一样——这个需要和插件的 Bundle-SymbolicName
- 和 packaging
需要 eclipse-plugin
.
通过在父 POM 中添加带有这些项目路径的 <modules>
部分,将插件和功能项目包括在 Maven 反应器中:
<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。
我的工作区中有一个插件和一个功能项目。当我通过文件 > 导出为 > 功能手动导出功能时,一切正常。我正在尝试编写一个自动插件构建和导出脚本来摆脱这个苦差事。我将功能项目转换为 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 反应器,其中包括一个 eclipse-feature
和一个 eclipse-plugin
项目。以下是您的操作方法:
- 使当前的 pom.xml 成为父 POM:将包装更改为
pom
,将artifactId
调整为有意义的内容(例如MyProject.parent
),然后移动pom.xml 在您的工作区中创建一个新的通用项目。 在功能项目的根目录添加一个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>
在插件项目的根目录下再添加一个pom.xml,除
artifactId
外,和上面的一样——这个需要和插件的Bundle-SymbolicName
- 和packaging
需要eclipse-plugin
.通过在父 POM 中添加带有这些项目路径的
<modules>
部分,将插件和功能项目包括在 Maven 反应器中:<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。