Java 8 & Manque de capacité de Besoin-Capacité: osgi.ee; filter=“(&(osgi.ee=JavaSE)(version=1.8))”
J'ai à l'aide d'Eclipse Luna win32.x86_64 runing avec Java 8.
Ici de la Help Menu > About > Installation Detail > Configuration Tab
:
java.runtime.version=1.8.0_05-b13
java.version=1.8.0_05
J'ai créé de nouveaux plug-in projet, en demandant JavaSE-1.8
comme Environnement d'Exécution:
Dans le myplugin/META-INF/MANIFEST.MF
fichier j'ai bien sûr:
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
J'utilise ce plugin dans une fiche produit. Quand j'essaie de le valider, j'obtiens l'erreur suivante:
Bien sûr, si je commence le produit, j'obtiens:
!ENTRY org.eclipse.osgi 2 0 2014-07-10 08:14:22.042
!MESSAGE One or more bundles are not resolved because the following root constraints are not resolved:
!SUBENTRY 1 org.eclipse.osgi 2 0 2014-07-10 08:14:22.043
!MESSAGE Bundle update@********/myplugin/ was not resolved.
!SUBENTRY 2 myplugin 2 0 2014-07-10 08:14:22.044
!MESSAGE Missing required capability Require-Capability: osgi.ee; filter="(&(osgi.ee=JavaSE)(version=1.8))".
J'ai essayé de vérifier beaucoup de choses:
Préférences > Java > Installé Jre
Préférences > Java > Installé Jre > Excution des Environnements
Préférences > Java > Compilateur: le JDK Conformité Compilateur niveau de conformité
Lorsque je démarre le produit, j'ai vérifié dans le Lancement onglet que j'utilise le jre8 comme environnement d'exécution.
J'ai même essayé de changer la Java Runtime Environment
dans le Run Configurations
Dialogue:
J'ai essayé différents réglages. Aucun d'entre eux travaille.
Quel est le problème?
Est-ce un problème connu?
Vous devez vous connecter pour publier un commentaire.
L'erreur signifie que votre offre est
Require-Capability: osgi.ee; filter="(&(osgi.ee=JavaSE)(version=1.8))"
entrée dans son manifeste. Donc, cela signifie que le faisceau ne démarre que lorsqu'il y a un module qui fournit cette fonctionnalité.Dans le cas de la osgi.ee la capacité c'est le framework OSGi (equinox), qui doit fournir cette fonctionnalité. Apparemment, il ne le fait pas.
Donc une approche serait de supprimer l'en-tête de vous bundle Manifeste.
L'autre serait de faire de l'équinoxe d'exportation de la capacité. Peut-être vous pouvez simplement essayer avec le nouveau équinoxe version. Vous ne savez pas si cela aide bien.
Vous pouvez également essayer de définir le cadre de la propriété (à l'aide d'-D):
org.osgi.framework.system.capabilities=osgi.ee; osgi.ee="JavaSE";version:Liste="1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8"
Voir
Partager mon expérience sur la rénovation d'une plate-forme cible basée sur Juno 3.8.2 pour exécuter JUnit plugin tests avec
Bundle-RequiredExecutionEnvironment
("BREE")JavaSE-1.8
:Échec de l'approche 1: Fragment
Création d'un fragment de
org.eclipse.osgi
avec unProvide-Capability
d'en-tête dans le manifeste:Cette capacité n'a jamais été ramassé.
Échec de l'approche 2: paramètre de Démarrage
À l'aide de
-Dorg.osgi.framework.system.capabilities
comme indiqué dans Christian réponse.Tout d'abord, l'argument doit être indiqué correctement:
Cette approche pourrait avoir fonctionné pour tout autre cas d'utilisation autre que
pde.junit
. J'ai toujours cette (légèrement différente) exception:Approche de travail 3: Patch Équinoxe
Patch le
org.eclipse.osgi
bundle pour inclure de LunaJavaSE-1.8.profile
.De copier le fichier
<LUNA>\plugins\org.eclipse.osgi_3.10.1.v20140909-1633.jar\JavaSE-1.8.profile
à votre plate-forme cible bundle de la piscineorg.eclipse.osgi
bundle.(par exemple,
<myworkspace>\.metadata\.plugins\org.eclipse.pde.core\.bundle_pool\plugins\org.eclipse.osgi_3.8.2.v20130124-134944.jar\JavaSE-1.8.profile
)Profil de référence dans
profile.list
(en fait, ce qui semble être facultatif):ajouter
JavaSE-1.8.profile,\
à.metadata\.plugins\org.eclipse.pde.core\.bundle_pool\plugins\org.eclipse.osgi_3.8.2.v20130124-134944.jar\profile.list
Toutefois, cette solution nécessite l'hébergement de votre propre P2 référentiel contenant les
org.eclipse.osgi
ensemble ou l'application d'un patch à chaque espace de travail du bundle de la piscine.Discussion
Encore, il existe la possibilité de garder BREE à "JavaSE-1.7" qui est compatible avec l'existant
org.eclipse.osgi
version 3.8.2.Je suis actuellement conscients de deux inconvénients:
Sans doute, de la PDE évalue BREE et définit compilateur du niveau de la source en conséquence, ce qui se traduit par "1.7" pour Java 8 sources. Il est possible que d'autres inhibiteurs de la PDE caractéristiques (fonction d'exportation, exportation de produits) peuvent présenter le même problème.
À l'aide de Eclipse Tycho, il est possible de remplacer manuellement les javac au niveau de la source au lieu d'évaluer un paquet de BREE (pour sélectionner un JDK pour compiler avec). Cependant, aussi Tycho est toujours conforme à la donnée du niveau de la source vs BREE et refuse de compiler Java 8 code (testé avec Tycho 0.22).
Aussi, la méthode 2 ne sera probablement pas travailler avec des inhibiteurs de la PDE du faisceau à l'exportation, au moins je ne suis pas au courant de la possibilité de passer VM arguments.
Mise à jour 29.05.2015
Nous sommes allés à l'approche 3 et corrigés avec succès notre plate-forme cible pour utiliser Java 8 avec Eclipse 3.8.
Comme nous l'avons déjà maintenir notre propre P2 référentiel avec tous 3.8 à base de plug-ins Eclipse, nous avons besoin de:
org.eclipse.osgi
(nécessaires à la bande de signature d'informations à partir de bundle ainsi)org.eclipse.rcp
fonctionnalité avec la mise à jourorg.eclipse.osgi
bundleRésumé
Si vous gérez votre propre P2 référentiel pour servir une plateforme cible personnalisée au lieu d'utiliser toute Éclipse.org-fonction de mise à jour du site, il est possible de faire Eclipse 3.8 travailler avec Java 8.
Références: Eclipse Bug à l'appui osgi.ee
profile.list
fichier est obligatoire.J'ai trouvé une configuration qui fonctionne, tout simplement, sans beaucoup de travail. Vous sélectionnez Java 8 en produit de fichier, les paramètres de projet et de construire le chemin. L'important, c'est le fichier manifeste. Ici, vous devez sélectionner les deux Java 8 et Java 7. Ici aussi l'ordre est important. Java 8 a à être sur le dessus.
Je pense que la raison de cette configuration est de travail est que le compilateur choisit la première JRE et peut donc traiter la nouvelle syntaxe de Java 8. L'éclipse faisceaux de vérifier si l'une des entrées est le besoin de Java 7 et sont également satisfaits.
Une solution facile est d'inclure org.eclipse.équinoxe.ds (équinoxe déclarative des services). Que le pack runtime exportations de la nécessaire osgi.extender et semble ne déclenchent pas de dépendances supplémentaires.
org.eclipse.equinox.event
outreorg.eclipse.equinox.ds
Add Required Plug-ins
semble être rompu: bugs.eclipse.org/bugs/show_bug.cgi?id=494913Réel et Rapide Solution:
"J'ai édité l'onglet Plugins sur la Configuration d'Exécution et vérifié org.eclipse.équinoxe.ds et cliqué sur "Ajouter des Plugins". QU'IL FIXE."
https://bugs.eclipse.org/bugs/show_bug.cgi?id=494913#c2
J'ai eu cette erreur dans liferay dxp. J'avais changé liferay espace de travail et il fonctionne très bien.
J'ai le même problème: le Manque de capacité de Besoin-Capacité: osgi.ee; filter="(&(osgi.ee=JavaSE)(version=1.8))
Je suis à l'aide de Félix 5.6.10
Ici est une chose intéressante, j'ai découvert:
J'ai créé deux test.jar les faisceaux qui contiennent les éléments suivants MANIFESTE.MF
test1.jar
Manifest-Version: 1.0
Bundle-Description: bundle utilisé pour les tests
Bundle-SymbolicName: com.phinneyridge.testbundle
Bundle-Version: 0.0.1
Bundle-Name: testbundle
Bundle-ManifestVersion: 2
Nécessitent-Capacité: osgi.ee=JavaSE; version="1.8"
Créé Par: 1.8.0_131 (Oracle Corporation)
test2.jar:
Manifest-Version: 1.0
Bundle-Description: bundle utilisé pour les tests
Bundle-SymbolicName: com.phinneyridge.testbundle
Bundle-Version: 0.0.2
Bundle-Name: testbundle
Bundle-ManifestVersion: 2
Nécessitent-Capacité: osgi.ee;filter:="(&(osgi.ee=JavaSE)(version 1.8))"
Créé Par: 1.8.0_131 (Oracle Corporation)
Comme vous pouvez le voir, les deux groupes ne diffèrent que dans le Bundle-Version et comment la capacité requise est spécifié.
Le résultat est:
test1.jar installe un peu fine
test2.jar produit le manque d'exigence de message lorsque vous essayez de l'installer.
Donc il ya quelque chose à propos de l'utilisation d'un filtre dans le Besoin et la Capacité d'en-tête qui ne fonctionne pas dans mon felix osgi cadre. Il n'est pas pris en charge, est-il quelque chose que je dois configurer pour activer les filtres? Evidemment ce n'est pas parce que mon cadre n'est pas configuré pour avoir le nécessaire osgi.ee capacité (test1.jar fonctionne).
Évidemment, cela signifie que si je corrige le Besoin et la Capacité à en-tête dans les failles des bundles, j'ai obtenu une solution de contournement. (Pas une bonne solution si vous êtes à l'installation de votre faisceaux sur la base d'un référentiel.)
J'ai trouvé le problème dans le Felix 5.6.10 version qui était la cause de mon problème:
C'est le code qui crée le problème.
C'est dans le constructeur de la ExtensionManager
changé la dernière ligne:
la raison pour laquelle il cause un problème, c'est que, un peu plus loin dans le constructeur, nous trouvons ce code:
Sans la correction de la ManifestParser constructeur d'appel déclenche une exception qui se plaint qu'un exportés de la capacité ne peut pas être vide. Que virgule supplémentaire dans le syspkgs fait l'analyseur pense que d'une certaine capacité manquait.
Et une fois que vous échouez dans ce bloc try vous n'obtenez pas votre hôte osgi.ee capacités ajouté à votre cadre qui signifie que vous ne pouvez pas
résoudre les requêtes comme (&(osgi.ee=JavaSE)(version=1.8))
Juste pour être clair, il s'agit de la version que je fais référence:
Ce problème se produit uniquement si vous en ajoutant des capacités du système à votre configuration, comme je l'ai fait. Donc cela pourrait expliquer pourquoi certaines personnes voient ce problème et d'autres pas.
J'ai appliqué le patch et les déclarants sont une fois de plus de travail.