2011-02-09 8 views
7

En mi aplicación RCP, me gustaría señalar una propiedad (osgi.java.profile) a un archivo, y preferiría utilizar rutas relativas a mi instalación y configuración dir.Configuración de Eclipse OSGI: ¿rutas relativas y/o sustituciones de @ config.dir?

¿Existe una especificación definitiva sobre qué tipo de variables se admiten en config.ini?


@ config.dir parece estar apoyado, hay referencias en la orden interna, y siempre ha mencionado como ejemplo típico (por ejemplo this SO answer) Sin embargo, mirando a documentos como Eclipse ayuda/Runtime Options, se menciona algunos "ubicaciones simbólicas" como @ user.home; sin embargo, parece bastante limitado y no incluye @ config.dir.

Incluso se han extraído en fuentes org.eclipse.osgi, y no se encontraron referencias a esto (encontré el LocationManager y sus sustituciones de variables codificadas para @ user.dir & co). ¿Puedo referirme a las propiedades arbitrarias del sistema allí de alguna manera?

¿Es esto @ config.dir un caso especial, solo manejado por P2? ACTUALIZACIÓN: esto parece ser el caso .. mirando Eclipse SDK, .. Acerca de espectáculos de diálogo de configuración @ config.dir sin resolver, probablemente tomados literalmente por el equinoccio ..

Gracias por cualquier insinuación.

+0

+1 y yo estoy abriendo una recompensa por esta pregunta. Realmente necesito poder especificar una ruta relativa al directorio de instalación, en lugar del área de configuración, para eclipse.p2.data.area en mi config.ini. Si alguien me puede decir cómo hacerlo, ¡tenga 200 representantes! –

+0

@pelotom, gracias por el impulso, esperemos ... de hecho, estoy bastante convencido de que mi pregunta no tiene una respuesta precisa (es increíble, pero la sustitución parece estar codificada en el núcleo). Sin embargo, dado que pareces estar más interesado en una propiedad específica de P2, podría ser mejor admitida, es decir, @ config.dir parece ser manejado especialmente por el proceso de configuración de P2, tal vez esa no sea la única. – inger

Respuesta

1

De org.eclipse.core.runtime.adaptor.LocationManager, aquí están las fichas especiales:

// Data mode constants for user, configuration and data locations.                       
    private static final String NONE = "@none"; //$NON-NLS-1$                         
    private static final String NO_DEFAULT = "@noDefault"; //$NON-NLS-1$                       
    private static final String USER_HOME = "@user.home"; //$NON-NLS-1$                       
    private static final String USER_DIR = "@user.dir"; //$NON-NLS-1$                       
+0

Gracias Chris - Encontré esa misma lista (mira mi pregunta). Parece bastante limitado, así que me preguntaba si me perdí algo (por ejemplo, propiedades del sistema o sg así). Después de depurar el marco, no parece mucha esperanza. – inger

+0

También hice una pregunta similar en el grupo de noticias de Equinox http://www.eclipse.org/forums/index.php?t=msg&goto=653500&S=2de0a18be29a148e02639f3968181b8e#msg_653500 - en espera de respuesta. – inger

+0

@inger: parecía bastante claro desde el código fuente que esas son las únicas opciones compatibles. –

1

por qué no utilizar dos variables de las propiedades del sistema?

Uno se llama -Dmy.relativepath=filename, que es procesado por su código de ruta relativa de la carpeta de instalación de eclipse (área de trabajo o en cualquier lugar), otro se llama -Dmy.path=absolutepath.

La propiedad del sistema se pasa al jvm, se necesita algún truco (traducir la variable en tiempo de ejecución) en el iniciador nativo (como eclipse.exe) si se quiere usar una variable en su valor.

+0

Por supuesto que puedo probar una solución donde creo las propiedades que Eclipse debería tener, pero al menos eso requeriría un script de iniciador adicional, hacks adicionales ... Después de esto, todavía no estoy seguro de poder llegar a esa propiedad en config.ini , como parte de otras definiciones de propiedad ... Lo que realmente me interesaba si había alguna característica de Eclipse para hacer esto que me perdí. – inger

+1

@inger, definitivamente es un truco de p2. Puede encontrar que @ config.dir se sustituye por el valor de la propiedad de estructura 'osgi.configuration.area' en tiempo de ejecución. Vea el método org.eclipse.equinox.internal.p2.core.Activator.buildLocation (String, URI, boolean, boolean). El valor de la propiedad del sistema de jvm 'eclipse.p2.data.area' siempre es '@ config.dir /../ p2'. – Kane

1

Mira cómo osgi.java.profile se resuelve en org.eclipse.osgi.framework.internal.core.Framework:

// check for the java profile property for a url 
String propJavaProfile = FrameworkProperties.getProperty(Constants.OSGI_JAVA_PROFILE); 
if (propJavaProfile != null) 
    try { 
     // we assume a URL 
     url = new URL(propJavaProfile); 
    } catch (MalformedURLException e1) { 
     // try using a relative path in the system bundle 
     url = findInSystemBundle(propJavaProfile); 
    } 

Eso significa osgi.java.profile debe apuntar bien a una dirección URL completa, o para una ruta relativa en el conjunto del sistema (org.eclipse.osgi) . Esto hace imposible el uso de la ruta relativa del directorio de instalación sin parchear Eclipse.

1

Puede usar una URL plataforma (Platform URI scheme) para lograr esto, es decir,

osgi.java.profile = platform:/config/java_profile.txt 

en config.ini, habría que apunte al archivo java_profile.txt en el directorio de configuración actual.

También puede utilizar las propiedades del sistema existentes en config.ini:

osgi.java.profile = ${osgi.configuration.area}/java_profile.txt 
+0

Supongo que esto será útil, pruébelo lo antes posible. ¿Sabes si este soporte se agregó recientemente, funcionaría en 3.6.x? La última vez que me rendí y terminé con rutas absolutas desagradables. – inger

+0

@inger Sí, debería funcionar para 3.6, al menos de acuerdo con la [documentación] (http://help.eclipse.org/helios/index.jsp) – tkotisis

3

llego tarde a la fiesta, pero espero que esto va a ayudar a otros en el futuro.

Comenzando con Eclipse 3.8/4.2 (junio de 2012), puede sustituir las propiedades de Java y las variables de entorno en su archivo config.ini (Eclipse Bug 241192). El iniciador de Equinox no admite la sustitución en el archivo de inicio de eclipse.ini. La sintaxis utiliza signos de dólar ($ variable $) para indicar la sustitución de variables:

osgi.configuration.area=$APPDATA$/MyCompany/MyProgram/configuration 
osgi.user.area=$APPDATA$/MyCompany/MyProgram/user 
osgi.instance.area=$APPDATA$/MyCompany/MyProgram/instance 

Me imagino que usted podría utilizar algo como esto para sus propósitos:

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

Funciona bien con algunas variables, por ejemplo 'osgi.install.area'. Otras variables como 'osgi.configuration.area' no se resuelven. – Tobber

Cuestiones relacionadas