2017-09-07 3 views
0

Il existe un projet Eclipse RCP/IDE-Plug-in qui dépend de plusieurs modules Eclipse comme org.eclipse.e4.core.di ou org.eclipse.core.runtime.eclipse RCP maven/tycho manquant exigence 'ensemble org.eclipse.e4.core.di'

Ce projet est compilé dans un environnement Eclipse IDE for Committers avec un fichier .target pour la configuration des dépendances.

Je veux ajouter un maven sans tête/construire Tycho pour ce projet qui entraîne des erreurs comme suit:

[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 

La configuration du projet ressemble à ceci:

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) 

Je l'ai utilisé le tutoriel de Lars Vogel (http://www.vogella.com/tutorials/EclipseTycho/article.html#exercise-using-a-target-platform-for-the-build) pour la configuration de base et la compréhension.

Le contenu du fichier cible sont:

<?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> 

Ce attrape la plupart du temps ce que mes informations d'installation Eclipse imprime sur le logiciel installé.

Le target/pom.xml ressemble à ceci:

<?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> 

Le releng/pom.xml est assez grand et spécifie tous les plugins Maven/de Tycho, le fichier cible à utiliser pour la résolution des dépendances, des plates-formes cibles et tous les plug-ins et fonctionnalités sous forme de modules.

Pour un défaut de plug-in le fichier pom.xml ressemble à ceci:

<?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> 

J'ai lu beaucoup question similaire ici sur stackoverflow et essayé beaucoup des correctifs:

  • supprimer la version cible tag/pom.xml,
  • enlever le chemin relatif,
  • utilisant pom au lieu d'eclipse-cible définition
  • et quelques autres

Rien n'a fonctionné. Alors qu'est-ce qui me manque ici?

EDIT: Comme je l'ai compris les plugins Tycho de configuration releng/pom.xml et des trucs Devrais-maven. L'exécution de la commande mvn clean verfiy doit alors générer la solution alors que la définition Neon.target spécifiée dans releng/pom.xml prend les target/pom.xml et target/Neon.target pour obtenir l'environnement Eclipse (y compris les éléments org.eclipse.e4.core.di et org.eclipse.core) plus les autres dépendances définies.

EDIT2: Mon plug-in eclipse-target-definition est configuré comme ceci:

<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: J'utilise Tycho Version 1.0.0

EDIT4 Correction d'une faute de frappe dans target/pom.xml.

+0

Pouvez-vous ouvrir votre 'Neon.target' dans Eclipse * Target Editor *. Attendez qu'Eclipse ait résolu la plate-forme cible, puis vérifiez sur l'onglet * Contenu * si 'org.eclipse.e4.core.di' est effectivement inclus dans votre plate-forme cible. –

+0

OK, votre 'Neon.target' contient vraiment ** org.eclipse.e4.core.di' (juste vérifié moi-même). Mais est-ce que votre plug-in 'org.myplugin.someservice' vous fait installer le plug-in Maven [target-platform-configuration] (https://wiki.eclipse.org/Tycho/Target_Platform#Target_files) dans son' pom. xml' (ou l'un de ses parents)? –

+0

J'ai ajouté la configuration du plugin target-platform-configuration comme EDIT2. Cette config est dans le pom.xml parent de org.myplugin.releng. – justwellbrock

Répondre

0

Vous devrez exécuter Maven avec -P Neon.target pour activer votre <profile>; sinon votre target-platform-configuration ne fera pas partie de la construction.

Personnellement, je voudrais toujours avoir une valeur par défaut target-platform-configuration en dehors de tout <profile>. Cela pourrait être, par exemple, une définition de cible pour la version actuelle d'Eclipse (à la date de cette écriture: Oxygen). J'utiliserais seulement `pour inhabituelle les définitions de cible comme les anciennes versions d'Eclipse (dans votre cas: Neon). Mais ce n'est que ma meilleure pratique personnelle.

-1

En fait, j'ai résolu mon problème, mais pas comme je m'y attendais. Je suppose que ce n'est pas comme il devrait fonctionner, mais voici comment cela fonctionne maintenant:

J'ai ajouté au parent org.myplugin.releng/pom.xml pom la configuration suivante en fonction de la réponse à this question:

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

Je l'ai fait auparavant, mais il a manqué que j'avais déjà une section dépôts ailleurs dans le pom.xml qui l'a fait échouer et se sont perdus de cette piste dans ma rage: D

en fait, je crois encore qu'il devrait obtenir cette information de la cible fichier. J'ai remarqué sur la construction réussie, que le fichier cible est évalué après le parent pom conduisant à la situation qu'il exige toutes les dépendances avant même de traiter le fichier de définition cible. Je parie que quelque chose ne va pas encore avec ma configuration, mais au moins il se construit maintenant. Si quelqu'un a une idée, cela me soulagerait en quelque sorte :)

+0

Vous avez raison: Le '' ne devrait pas être nécessaire; le 'eclipse-target-definition' devrait faire tout le travail. "[L] e fichier cible est évalué après le pom parent", mais avant de * construire ** ** tous les projets, Tycho essaie de * résoudre * la plate-forme cible de ** chaque ** projet. Pour ce faire, tous les projets 'eclipse-target-definition' (pas encore construits) doivent strictement respecter [la convention de dénomination du fichier' .target'] (https://wiki.eclipse.org/Tycho/Packaging_Types # eclipse-target-definition) afin que Tycho puisse localiser le fichier cible dans votre répertoire de projet. –