2017-09-07 162 views
0

有一個Eclipse RCP/IDE插件項目依賴於幾個Eclipse模塊,如org.eclipse.e4.core.diorg.eclipse.core.runtimeeclipse RCP maven/tycho缺少需求'包org.eclipse.e4.core.di'

該項目在提交者環境的Eclipse IDE中進行編譯,並使用.target文件進行依賴關係設置。

我想添加一個無頭的行家/第谷建立該項目導致的錯誤如下:

[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是相當大的,並指定所有行家/第谷的插件,用於解決依賴,目標平臺和所有插件和特性模塊的目標文件。

對於一個失敗插件的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> 

我在這裏計算器看過不少類似的問題,並試圖許多修復:

  • 刪除版本tag target/pom.xml,
  • 刪除相對路徑
  • 使用pom代替eclipse-target-definition
  • 和更多

沒有工作。那麼我在這裏錯過了什麼?

編輯: 據我瞭解releng/pom.xml應設置tycho插件和maven的東西。然後執行命令mvn clean verfiy要構建解決方案,而在releng/pom.xml指定Neon.target定義採用target/pom.xmltarget/Neon.target獲得Eclipse環境(包括org.eclipse.e4.core.di,並org.eclipse.core東西),加上任何進一步明確相關性。

EDIT2: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中的錯字。

+0

你可以在Eclipse * Target Editor *中打開你的'Neon.target'。等到Eclipse解決了目標平臺,然後仔細檢查* Contents *標籤,確定org.eclipse.e4.core.di是否確實包含在目標平臺中。 –

+0

好的,你的'Neon.target'確實**包含'org.eclipse.e4.core.di'(只是雙重檢查自己)。但是,你的'org.myplugin.someservice'插件是否在你的'pom中配置了[target-platform-configuration](https://wiki.eclipse.org/Tycho/Target_Platform#Target_files)Maven插件。 xml'(或其父母之一)? –

+0

我將目標平臺配置插件的配置附加爲EDIT2。該配置位於org.myplugin.releng的父pom.xml中。 – justwellbrock

回答

0

您將需要運行Maven與-P Neon.target來激活您的<profile>;否則你的target-platform-configuration不會成爲構建的一部分。

就個人而言,我會總是有一個默認target-platform-configuration以外的任何<profile>。這可以是,例如,當前版本的Eclipse的目標定義(截至撰寫本文時:Oxygen)。我只會使用`不尋常的目標定義,比如較舊的Eclipse版本(在您的情況下:Neon)。但這只是我個人的最佳做法。

-1

其實我解決了我的問題,但不像我預料中的那樣。我認爲它沒有像它應該工作,但這裏是它如何工作現在:

我加入org.myplugin.releng/pom.xml父POM以下配置根據答案this question

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

我之前所做的,但錯過了我已經有一個存儲庫在其他地方的pom.xml部分導致它失敗,並在我的憤怒丟失了該軌道:D

其實我仍然認爲它應該從目標文件。我注意到在成功的構建中,目標文件在父pom之後被評估,導致在處理目標定義文件之前它需要所有依賴關係。

我敢打賭,我的配置仍然存在問題,但至少現在可以構建。如果有人有任何想法,但它會以某種方式緩解我:)

+0

你是對的:''不應該是必需的; 'eclipse-target-definition'應該完成所有的工作。 「目標文件在父pom」被預期之後評估,但在* building *之前*任何**項目Tycho試圖*解決**每個**項目的目標平臺。爲了做到這一點,所有(尚未構建的)'eclipse-target-definition'項目必須嚴格遵守[.target'文件的命名約定(https://wiki.eclipse.org/Tycho/Packaging_Types #eclipse-target-definition),這樣Tycho就可以在你的項目目錄中找到目標文件。 –

相關問題