eclipse RCP maven/tycho 缺少要求 'bundle org.eclipse.e4.core.di'
eclipse RCP maven/tycho missing requirement 'bundle org.eclipse.e4.core.di'
有一个 Eclipse RCP/IDE-Plug-in 项目依赖于几个 Eclipse 模块,例如 org.eclipse.e4.core.di
或 org.eclipse.core.runtime
。
此项目在 Eclipse IDE for Committers 环境中编译,并带有用于依赖设置的 .target
文件。
我想为此项目添加无头 maven/tycho 构建,导致错误如下:
[ERROR] Cannot resolve project dependencies:
[ERROR] Software being installed: org.myplugin.someservice 1.0.0
[ERROR] Missing requirement: org.myplugin.someservice 1.0.0 requires 'bundle org.eclipse.e4.core.di 0.0.0' but it could not be found
项目设置如下所示:
releng/
org.myplugin.releng/
pom.xml (contains tycho-plugins def, modules, target ref)
org.myplugin.target/
Neon.target
pom.xml (contains 'eclipse-target-definition')
plugins/
org.myplugin.someservice/
pom.xml
META-INF/
MANIFEST.MF (contains reference to org.eclipse.e4.core.di)
我使用 Lars Vogel (http://www.vogella.com/tutorials/EclipseTycho/article.html#exercise-using-a-target-platform-for-the-build) 的教程进行基本设置和理解。
目标文件内容为:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?pde version="3.8"?><target name="Neon" sequenceNumber="43">
<locations>
<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="false" type="InstallableUnit">
<unit id="org.eclipse.platform.sdk" version="4.6.3.M20170301-0400"/>
<unit id="org.eclipse.pde.feature.group" version="3.12.3.v20170301-0400"/>
<unit id="org.eclipse.pde.source.feature.group" version="3.12.3.v20170301-0400"/>
<unit id="org.eclipse.platform.ide" version="4.6.3.M20170301-0400"/>
<unit id="org.eclipse.equinox.sdk.feature.group" version="3.12.0.v20170209-1843"/>
<unit id="org.eclipse.rcp.feature.group" version="4.6.3.v20170301-0400"/>
<repository location="http://download.eclipse.org/eclipse/updates/4.6"/>
</location>
<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="false" type="InstallableUnit">
<unit id="org.eclipse.emf.cdo.epp.feature.group" version="4.5.0.v20160607-1511"/>
<unit id="org.eclipse.emf.sdk.feature.group" version="2.12.0.v20160526-0356"/>
<unit id="org.eclipse.emf.compare.diagram.papyrus.feature.group" version="3.2.1.201608311750"/>
<unit id="org.eclipse.xtext.sdk.feature.group" version="2.10.0.v201605250459"/>
<unit id="org.eclipse.gmf.runtime.sdk.feature.group" version="1.10.0.201606071959"/>
<unit id="org.eclipse.gmf.runtime.notation.sdk.feature.group" version="1.10.0.201606071631"/>
<unit id="org.eclipse.uml2.sdk.feature.group" version="5.2.3.v20170227-0935"/>
<unit id="org.eclipse.emf.compare.ide.ui.feature.group" version="3.2.1.201608311750"/>
<repository location="http://download.eclipse.org/releases/neon"/>
</location>
</locations>
</target>
这主要反映了我的 Eclipse 安装信息打印出的有关已安装软件的信息。
target/pom.xml
看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>
<project
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.myplugin</groupId>
<artifactId>org.myplugin.releng</artifactId>
<version>1.0.0-SNAPSHOT</version>
<relativePath>../org.myplugin.releng/pom.xml</relativePath>
</parent>
<groupId>org.myplugin</groupId>
<artifactId>org.myplugin.target</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>eclipse-target-definition</packaging>
</project>
releng/pom.xml
相当大,指定了所有 maven/tycho 插件、用于依赖项解析的目标文件、目标平台以及所有插件和功能作为模块。
对于一个失败的插件,pom.xml 文件如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.myplugin</groupId>
<artifactId>org.myplugin.releng</artifactId>
<version>1.0.0-SNAPSHOT</version>
<relativePath>../../org.myplugin.releng/pom.xml</relativePath>
</parent>
<groupId>org.myplugin</groupId>
<artifactId>org.myplugin.someservice</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>eclipse-plugin</packaging>
</project>
我在 Whosebug 上阅读了很多类似的问题并尝试了很多修复方法:
- 删除版本标签 target/pom.xml,
- 删除相对路径,
- 使用 pom 代替 eclipse-target-definition
- 还有一些
没有任何效果。那么我在这里缺少什么?
编辑:
据我了解,releng/pom.xml
应该设置 tycho 插件和 maven 东西。执行 mvn clean verfiy
命令应该构建解决方案,而 releng/pom.xml
中指定的 Neon.target 定义采用 target/pom.xml
和 target/Neon.target
来获取 Eclipse 环境(包括 org.eclipse.e4.core.di
,和 org.eclipse.core
东西)加上任何进一步定义的依赖关系。
编辑2:
我的 eclipse-target-definition
插件配置如下:
<profile>
<id>Neon.target</id>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
<properties>
<xtext-version>2.10.0</xtext-version>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>target-platform-configuration</artifactId>
<version>${tycho-version}</version>
<configuration>
<includePackedArtifacts>true</includePackedArtifacts>
<target>
<artifact>
<groupId>org.myplugin</groupId>
<artifactId>org.myplugin.target</artifactId>
<version>1.0.0-SNAPSHOT</version>
<classifier>org.myplugin.target</classifier>
</artifact>
</target>
</configuration>
</plugin>
</plugins>
</build>
</profile>
EDIT3: 我正在使用第谷版本 1.0.0
EDIT4 修正了 target/pom.xml
.
中的错字
实际上我解决了我的问题,但并不像我预期的那样。我认为它不应该起作用,但现在它是这样起作用的:
我根据 this question 的回答向 org.myplugin.releng/pom.xml
父 pom 添加了以下配置:
<repositories>
<repository>
<id>neon</id>
<layout>p2</layout>
<url>http://download.eclipse.org/releases/neon/</url>
</repository>
</repositories>
我以前做过,但是错过了我在 pom.xml 的其他地方已经有一个 repositories 部分,这导致它失败并丢失了我的轨道愤怒 :D
实际上我仍然认为它应该从目标文件中获取该信息。我注意到在成功构建时, 目标文件在父 pom 之后被评估,导致在处理目标定义文件之前它需要所有依赖项的情况。
我敢打赌我的配置仍然有问题,但至少现在可以构建了。如果有人有任何想法,虽然它会以某种方式让我感到宽慰:)
您需要 运行 Maven 和 -P Neon.target
来激活您的 <profile>
;否则你的 target-platform-configuration
将不会成为构建的一部分。
就个人而言,我 总是 在任何 <profile>
之外有一个默认值 target-platform-configuration
。例如,这可能是 Eclipse 当前版本的目标定义(截至撰写本文时:Oxygen)。我只会将 ` 用于 unusual 目标定义,例如较旧的 Eclipse 版本(在您的情况下:Neon)。但这只是我个人的最佳实践。
有一个 Eclipse RCP/IDE-Plug-in 项目依赖于几个 Eclipse 模块,例如 org.eclipse.e4.core.di
或 org.eclipse.core.runtime
。
此项目在 Eclipse IDE for Committers 环境中编译,并带有用于依赖设置的 .target
文件。
我想为此项目添加无头 maven/tycho 构建,导致错误如下:
[ERROR] Cannot resolve project dependencies:
[ERROR] Software being installed: org.myplugin.someservice 1.0.0
[ERROR] Missing requirement: org.myplugin.someservice 1.0.0 requires 'bundle org.eclipse.e4.core.di 0.0.0' but it could not be found
项目设置如下所示:
releng/
org.myplugin.releng/
pom.xml (contains tycho-plugins def, modules, target ref)
org.myplugin.target/
Neon.target
pom.xml (contains 'eclipse-target-definition')
plugins/
org.myplugin.someservice/
pom.xml
META-INF/
MANIFEST.MF (contains reference to org.eclipse.e4.core.di)
我使用 Lars Vogel (http://www.vogella.com/tutorials/EclipseTycho/article.html#exercise-using-a-target-platform-for-the-build) 的教程进行基本设置和理解。
目标文件内容为:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?pde version="3.8"?><target name="Neon" sequenceNumber="43">
<locations>
<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="false" type="InstallableUnit">
<unit id="org.eclipse.platform.sdk" version="4.6.3.M20170301-0400"/>
<unit id="org.eclipse.pde.feature.group" version="3.12.3.v20170301-0400"/>
<unit id="org.eclipse.pde.source.feature.group" version="3.12.3.v20170301-0400"/>
<unit id="org.eclipse.platform.ide" version="4.6.3.M20170301-0400"/>
<unit id="org.eclipse.equinox.sdk.feature.group" version="3.12.0.v20170209-1843"/>
<unit id="org.eclipse.rcp.feature.group" version="4.6.3.v20170301-0400"/>
<repository location="http://download.eclipse.org/eclipse/updates/4.6"/>
</location>
<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="false" type="InstallableUnit">
<unit id="org.eclipse.emf.cdo.epp.feature.group" version="4.5.0.v20160607-1511"/>
<unit id="org.eclipse.emf.sdk.feature.group" version="2.12.0.v20160526-0356"/>
<unit id="org.eclipse.emf.compare.diagram.papyrus.feature.group" version="3.2.1.201608311750"/>
<unit id="org.eclipse.xtext.sdk.feature.group" version="2.10.0.v201605250459"/>
<unit id="org.eclipse.gmf.runtime.sdk.feature.group" version="1.10.0.201606071959"/>
<unit id="org.eclipse.gmf.runtime.notation.sdk.feature.group" version="1.10.0.201606071631"/>
<unit id="org.eclipse.uml2.sdk.feature.group" version="5.2.3.v20170227-0935"/>
<unit id="org.eclipse.emf.compare.ide.ui.feature.group" version="3.2.1.201608311750"/>
<repository location="http://download.eclipse.org/releases/neon"/>
</location>
</locations>
</target>
这主要反映了我的 Eclipse 安装信息打印出的有关已安装软件的信息。
target/pom.xml
看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>
<project
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.myplugin</groupId>
<artifactId>org.myplugin.releng</artifactId>
<version>1.0.0-SNAPSHOT</version>
<relativePath>../org.myplugin.releng/pom.xml</relativePath>
</parent>
<groupId>org.myplugin</groupId>
<artifactId>org.myplugin.target</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>eclipse-target-definition</packaging>
</project>
releng/pom.xml
相当大,指定了所有 maven/tycho 插件、用于依赖项解析的目标文件、目标平台以及所有插件和功能作为模块。
对于一个失败的插件,pom.xml 文件如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.myplugin</groupId>
<artifactId>org.myplugin.releng</artifactId>
<version>1.0.0-SNAPSHOT</version>
<relativePath>../../org.myplugin.releng/pom.xml</relativePath>
</parent>
<groupId>org.myplugin</groupId>
<artifactId>org.myplugin.someservice</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>eclipse-plugin</packaging>
</project>
我在 Whosebug 上阅读了很多类似的问题并尝试了很多修复方法:
- 删除版本标签 target/pom.xml,
- 删除相对路径,
- 使用 pom 代替 eclipse-target-definition
- 还有一些
没有任何效果。那么我在这里缺少什么?
编辑:
据我了解,releng/pom.xml
应该设置 tycho 插件和 maven 东西。执行 mvn clean verfiy
命令应该构建解决方案,而 releng/pom.xml
中指定的 Neon.target 定义采用 target/pom.xml
和 target/Neon.target
来获取 Eclipse 环境(包括 org.eclipse.e4.core.di
,和 org.eclipse.core
东西)加上任何进一步定义的依赖关系。
编辑2:
我的 eclipse-target-definition
插件配置如下:
<profile>
<id>Neon.target</id>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
<properties>
<xtext-version>2.10.0</xtext-version>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>target-platform-configuration</artifactId>
<version>${tycho-version}</version>
<configuration>
<includePackedArtifacts>true</includePackedArtifacts>
<target>
<artifact>
<groupId>org.myplugin</groupId>
<artifactId>org.myplugin.target</artifactId>
<version>1.0.0-SNAPSHOT</version>
<classifier>org.myplugin.target</classifier>
</artifact>
</target>
</configuration>
</plugin>
</plugins>
</build>
</profile>
EDIT3: 我正在使用第谷版本 1.0.0
EDIT4 修正了 target/pom.xml
.
实际上我解决了我的问题,但并不像我预期的那样。我认为它不应该起作用,但现在它是这样起作用的:
我根据 this question 的回答向 org.myplugin.releng/pom.xml
父 pom 添加了以下配置:
<repositories>
<repository>
<id>neon</id>
<layout>p2</layout>
<url>http://download.eclipse.org/releases/neon/</url>
</repository>
</repositories>
我以前做过,但是错过了我在 pom.xml 的其他地方已经有一个 repositories 部分,这导致它失败并丢失了我的轨道愤怒 :D
实际上我仍然认为它应该从目标文件中获取该信息。我注意到在成功构建时, 目标文件在父 pom 之后被评估,导致在处理目标定义文件之前它需要所有依赖项的情况。
我敢打赌我的配置仍然有问题,但至少现在可以构建了。如果有人有任何想法,虽然它会以某种方式让我感到宽慰:)
您需要 运行 Maven 和 -P Neon.target
来激活您的 <profile>
;否则你的 target-platform-configuration
将不会成为构建的一部分。
就个人而言,我 总是 在任何 <profile>
之外有一个默认值 target-platform-configuration
。例如,这可能是 Eclipse 当前版本的目标定义(截至撰写本文时:Oxygen)。我只会将 ` 用于 unusual 目标定义,例如较旧的 Eclipse 版本(在您的情况下:Neon)。但这只是我个人的最佳实践。