8
votes

Eclipse OSGI CONFIG: Chemins relatifs et / ou Substitutions de type @ config.Dir?

Dans mon application RCP, je voudrais pointer une propriété ( osgi.java.profile ) dans un fichier et préféreriez utiliser des chemins par rapport à mon installation et de la configuration Dir.

Y a-t-il une spécification définitive sur quel type de variables sont pris en charge dans config.ini?


@ config.dir semble être pris en charge, il y a des références dans la construction, et il est toujours mentionné comme exemple typique (par exemple, cette réponse ) Cependant, en regardant des docs comme Eclipse help / Options d'exécution , il mentionne quelques" emplacements symboliques "comme @ user.home; Cependant, cela semble assez limité et n'inclut pas @ config.dir.

a même creusé dans org.eclipse.osgi également des sources, et je n'ai trouvé aucune référence à ceci (j'ai trouvé l'emplacementManager et ses substitutions de variable codées durement pour @ user.dir & CO). Puis-je me référer à des propriétés du système arbitraire là-bas?

est-ce @ config.dir un cas spécial, uniquement géré par P2? MISE À JOUR: Ceci semble être le cas .. Regarder l'Eclipse SDK, à propos de .. La boîte de dialogue de configuration indique @ config.dir non résolu, probablement pris littéralement par l'équinoxe ..

Merci pour des indices.


2 commentaires

+1 et j'ouvre une prime pour cette question. J'ai vraiment besoin de pouvoir spécifier un chemin relatif au répertoire d'installation, plutôt que la zone de configuration, pour l'ECLIPSE.P2.DATA.AREA dans mon config.ini. Si quelqu'un peut me dire comment faire cela, avoir 200 représentants!


@Pelotom, merci pour le boost - j'espère. Je suis vraiment convaincu que ma question n'a pas de réponse précise (c'est incroyable mais la substitution ne semble plus codée dans le noyau). Toutefois, puisque vous semblez être plus intéressé par un Propriété spécifique à P2, il peut être mieux supporté, c'est-à-dire @ config.dir semble être spécialement géré par P2 CONFIG TRAITEMENT - peut-être que ce n'est pas le seul.


5 Réponses :


1
votes

de org.eclipse.core.runtime.adaptor.locollectManager, voici les jetons spéciaux: xxx


4 commentaires

Merci Chris -i a trouvé la même liste (voir ma question). Il semble assez limité - alors je me demandais si j'ai raté quelque chose (Propriétés du système E.g ou SG comme ça). Après avoir débogué dans le cadre, il ne semble pas beaucoup d'espoir.


J'ai également posé une question similaire sur l'Equinox Newsgroup Eclipse. org / forums / ... - En attente de réponse.


@inger: Il semblait assez clair du code source que ce sont les seules options prises en charge.


Eh bien, de la recherche uniquement chez EmplacementManager, oui, c'est un peu clair - je l'ai trouvé dans quelques minutes aussi. Mais cela n'a pas expliqué pourquoi @ config.dir est pris en charge alors (comme je l'ai dit que je suppose maintenant, c'est une manipulation spéciale pour P2, assez étrange, je pense). J'espérais juste que ce problème a été résolu d'une autre manière autrement osgi.java.profile semble assez inutile pour le développement de la RCP. Cela aurait été formidable si le juste accroché dans $ {System.properties} plutôt que des remplacements de codés dur stupides.



1
votes

Pourquoi ne pas utiliser deux variables de propriété système?

one est nommé -dmy.relativePath = nom de fichier , qui est traité par votre code de chemin relatif du dossier d'installation Eclipse (espace de travail ou n'importe où), un autre est appelé -dmy.path = -DMY.PATH = Absolutepath .

La propriété système est transmise à la JVM, vous avez besoin d'un peu délicat (traduire la variable en cours) dans le lanceur natif (comme Eclipse.exe) si vous souhaitez utiliser une variable dans sa valeur.


2 commentaires

Bien sûr, je peux essayer une solution de contournement où je crée des propriétés que l'Eclipse aurait dû, mais cela nécessiterait au moins un script de lanceur supplémentaire, des hacks supplémentaires. Après cela, je ne suis toujours pas sûr de pouvoir atteindre cette propriété dans Config.ini, Dans le cadre d'autres définitions de propriété .. Ce que j'étais vraiment intéressé s'il y avait une fonctionnalité Eclipse pour faire cela que j'ai manqué.


@inger, c'est certainement un délicat de P2. Vous pouvez trouver @ config.dir est substitué par la valeur de la propriété-cadre 'osgi.configuration.area' en exécution. Voir la méthode org.eclipse.equinox.internal.p2.core.activator.buildLocation (chaîne, URI, Boolean, Boolean). La valeur de la propriété système de JVM 'ECLIPSE.P2.DATA.AREA' TOUJOURS est '@ config.dir /../ p2'.



1
votes

Regarde comment osgi.java.profile est résolu dans org.eclipse.osgi.framework.internal.core.framework : xxx

osgi.java .profile doit pointer soit sur une URL entièrement qualifiée, soit à un chemin relatif dans l'ensemble du système ( org.eclipse.osgi ). Cela rend l'utilisation impossible d'utilisation du trajet relatif de répertoire d'installation sans corriger Eclipse.


0 commentaires

2
votes

Vous pouvez utiliser une URL de la plate-forme ( Plate-forme URI ) Pour y parvenir, c'est-à-dire xxx

dans config.ini , pointerait au fichier java_profile.txt dans le répertoire de configuration actuel.

Vous pouvez également utiliser les propriétés du système existantes dans config.ini: xxx


2 commentaires

Je suppose que cela sera utile - essayer dès que possible. Savez-vous si ce support est récemment ajouté, cela fonctionnerait-il dans 3.6.x? La dernière fois que j'ai abandonné et fini avec des chemins absolus désagréables ..


@inger Oui, il devrait fonctionner pour 3.6, au moins en fonction du Documentation



3
votes

Je suis en retard à la fête, mais j'espère que cela aidera les autres à l'avenir.

À partir de Eclipse 3.8 / 4.2 (juin 2012), vous pouvez remplacer les propriétés Java et les variables d'environnement dans votre fichier config.ini ( Eclipse Bug 241192 ). Le lanceur Equinox ne prend pas en charge la substitution dans le fichier eclipse.ini Launcher. La syntaxe utilise des panneaux de dollar ($ variable $) pour indiquer la substitution variable: p> xxx pré>

J'imagine que vous pouvez utiliser quelque chose comme celui-ci à vos fonctions: p>

osgi.java.profile=$osgi.install.area$/path/to/profile.txt


1 commentaires

Fonctionne bien avec certaines variables par ex. osgi.install.area . Autres variables telles que osgi.configuration.area ne sont pas résolues.