2012-08-28 7 views
14

desde la actualización a OSX Mountain Lion Tengo algunos problemas para configurar las variables de entorno para eclipse y maven.¿Cómo establecer variables de entorno para una aplicación en OSX Mountain Lion?

Mi objetivo es ejecutar un comando maven en Eclipse. Este comando necesita descargar artefactos (resolver dependencias) desde un repositorio remoto. El repositorio se autentica a través de HTTPS.

He seguido el Guide to Remote repository access through authenticated HTTPS y he agregado las líneas a mi .bash_profil. Si estoy ejecutando maven en la terminal, todo funciona bien.

export MAVEN_OPTS="-Xmx512m -Djavax.net.ssl.trustStore=/Users/myUser/.knowncerts/trust.jks -Djavax.net.ssl.trustStorePassword=trustPwd" 

Pero esto solo funciona para el terminal y no para aplicaciones. En anteriores versiones de OSX-había que añadir la variable MAVEN_OPTS a

~/.MacOSX/environment.plist 

(véase también Set environment variables on Mac OS X Lion) Esto funcionó para OSX Lion perfectamente.

Pero Apple ha cambiado este comportamiento en Mountain Lion. He leído el environment.plist ya no es compatible y la nueva forma es editar el Info.plist del .app mismo (Where are system environment variables set in Mountain Lion?). Parece que tiene que agregar un diccionario LSEnvironment que contiene todas las variables.

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
    <key>LSEnvironment</key> 
    <dict> 
     <key>M2_HOME</key> 
     <string>/usr/share/maven</string> 
     <key>MAVEN_OPTS</key> 
     <string>-Xmx512m -Djavax.net.ssl.trustStore=/Users/myUser/.knowncerts/trust.jks -Djavax.net.ssl.trustStorePassword=trustPwd</string> 
    </dict> 
    <key>CFBundleExecutable</key> 
    <string>eclipse</string> 
    <key>CFBundleGetInfoString</key> 
    <string>Eclipse 3.8 for Mac OS X, Copyright IBM Corp. and others 2002, 2011. All rights reserved.</string> 
    <key>CFBundleIconFile</key> 
    <string>Eclipse.icns</string> 
    <key>CFBundleIdentifier</key> 
    <string>org.eclipse.eclipse</string> 
    <key>CFBundleInfoDictionaryVersion</key> 
    <string>6.0</string> 
    <key>CFBundleName</key> 
    <string>Eclipse</string> 
    <key>CFBundlePackageType</key> 
    <string>APPL</string> 
    <key>CFBundleShortVersionString</key> 
    <string>3.8</string> 
    <key>CFBundleSignature</key> 
    <string>????</string> 
    <key>CFBundleVersion</key> 
    <string>3.8</string> 
    <key>CFBundleDevelopmentRegion</key> 
    <string>English</string> 
    <key>CFBundleLocalizations</key> 
    <array> 
     <string>ar</string> 
     <string>cs</string> 
     <string>da</string> 
     <string>el</string> 
     <string>en</string> 
     <string>es</string> 
     <string>de</string> 
     <string>fi</string> 
     <string>fr</string> 
     <string>hu</string> 
     <string>it</string> 
     <string>iw</string> 
     <string>ja</string> 
     <string>ko</string> 
     <string>nl</string> 
     <string>no</string> 
     <string>pl</string> 
     <string>pt_BR</string> 
     <string>pt</string> 
     <string>ru</string> 
     <string>sv</string> 
     <string>tr</string> 
     <string>zh_HK</string> 
     <string>zh_TW</string> 
     <string>zh</string> 
    </array> 
    <key>Eclipse</key> 
    <array> 
     <string>-keyring</string> 
     <string>~/.eclipse_keyring</string> 
     <string>-showlocation</string> 
    </array> 
</dict> 
</plist> 

Como puede ver he cambiado Info.plist de mi Eclipse.app. Pero esto no funciono. Comienzo maven dentro de Eclipse. Pero maven no puede descargar los artefactos, porque el repositorio remoto no es de confianza. Creo que Eclipse no usa las variables de entorno que definí en Info.plist

¿Tiene alguna sugerencia sobre cómo solucionar este problema?

Gracias por sus respuestas!

Respuesta

1

A partir de aquí: https://stackoverflow.com/a/10374886/325742

#!/bin/sh 
# 
export MAVEN_OPTS=#MAVEN_OPTS_HERE# 
LAUNCHER_JAR=/Applications/eclipse/plugins/org.eclipse.equinox.launcher_1.2.0.v20110502.jar 

java \ 
-showversion \ 
-XX:MaxPermSize=256m \ 
-Xms1024m \ 
-Xmx1024m \ 
-Xdock:icon=/Applications/eclipse/Eclipse.app/Contents/Resources/Eclipse.icns \ 
-XstartOnFirstThread \ 
-Dorg.eclipse.swt.internal.carbon.smallFonts \ 
-Dosgi.requiredJavaVersion=1.5 \ 
-jar $LAUNCHER_JAR 

A continuación, utilice los pasos en http://mathiasbynens.be/notes/shell-script-mac-apps, para convertir la secuencia de comandos en una aplicación que se puede mantener en el muelle.

+0

¡Gracias por la respuesta rápida! – Loki

+0

Desafortunadamente esto no solucionó mi problema. Cuando inicio Eclipse con el script, todavía no utiliza el 'MAVEN_OPTS'. Pero si exporto, por ejemplo, un 'M2_HOME' diferente, Eclipse usa este nuevo Maven-Home. – Loki

1

Puede configurar variable de entorno directamente en Eclipse bajo experta en "Configuraciones de depuración" -> pestaña "medio ambiente"

19

Desafortunadamente, esto parece ser la mejor opción para establecer una variable de entorno global en el OS X 10.8.x Montaña león:

para las variables de entorno temporal, ejecute este comando en Terminal.app y reinicie los aplicaciones que necesitan acceder a la variable:

launchctl setenv MYVARIABLE value 

Haciendo variable de entorno se mantenga al reiniciar, cree /etc/launchd.conf y añadir una línea como esta para cada variable, a continuación, reiniciar todo el sistema:

setenv MYVARIABLE value 

Esto funcionó para mí para establecer un entorno global variable que podría ser heredada por IntelliJ IDEA CE 12.0 en OS X 10.8.2. No es muy elegante, pero funciona.

Como alternativa, puede establecer la variable de entorno en Terminal.app, luego, inicie la aplicación desde la que desea acceder a la variable de entorno desde la línea de comandos. La aplicación lanzada heredará el entorno de su sesión de terminal. En Terminal.app, establecer la variable de entorno y lanzar otra aplicación con un comando como open -a "App Name":

export MYVARIABLE=value 
open -a "IntelliJ IDEA 12 CE" 

Esto abre IntelliJ IDEA, y mi código puede acceder $MYVARIABLE en su entorno.

Cuestiones relacionadas