2011-08-02 13 views

Respuesta

15

No, no puedes. Esta propiedad es un valor de solo lectura. Puede cambiarlo en el momento launchin JVM con:

-Djava.library.path=your_path 

Si desea cargar una biblioteca de un lugar específico, puede utilizar System.load(libraryPath) lugar por la ruta completa a la biblioteca.

+0

Quería aceptar las dos respuestas, pero como puedo aceptar solo una, iré con esto, ya que la genialidad depende de los detalles de implementación. – Fakrudeen

16

Tal vez esto ayuda http://blog.cedarsoft.com/2010/11/setting-java-library-path-programmatically/

[Editar] el enlace está muerto, por lo cito aquí

Copiado del http://blog.cedarsoft.com/2010/11/setting-java-library-path-programmatically/

Cuando jugar un poco con JNI, uno tiene que establecer la "Java.library.path" en consecuencia. Por desgracia, la única manera es añadir una propiedad del sistema antes de que se inicie la aplicación:

java Djava.library.path =/ruta/a/libs

mismo que

java -Djava .library.path = C: \ Java \ ljwgl \ libs org.mypackage.MyProgram Cambio de la propiedad del sistema más adelante no tiene ningún efecto, ya que la propiedad se evalúa muy temprano y almacena en caché. Pero los chicos de jdic descubrieron una forma de evitarlo. Es un poco sucio - pero bueno, esos cortes son la razón a todos nos gusta Java ...

System.setProperty ("java.library.path", "/ ruta/a/libs");

Campo fieldSysPath = ClassLoader.class.getDeclaredField ("sys_paths" ); fieldSysPath.setAccessible (verdadero); fieldSysPath.set (null, null); Explicación

En un primer momento la propiedad del sistema se actualiza con el nuevo valor. Es posible que sea una ruta relativa, o tal vez desee crear esa ruta dinámicamente.

el cargador de clase tiene un campo estático (sys_paths) que contiene los caminos. Si ese campo se establece en nulo, se inicializa automáticamente. Por lo tanto forzando ese campo en null dará lugar a la reevaluación de la ruta de la biblioteca tan pronto como loadLibrary() se llama ...

+0

+1 - Hack muy genial - Voy a probar esto como último recurso [esto es muy bueno, pero horrible para el mantenimiento!]. – Fakrudeen

+0

Indique las partes relevantes del artículo en su respuesta, ya que los enlaces pueden fallar (lo que tiene el suyo). –

-3
import java.util.Map; 

public class ReadingEnvironment { 

    public static void main(String[] args) { 
     System.out.println("Reading System Environment Variables:\n"); 
     // System.out.println(System.getenv()); 
     Map<String, String> env = System.getenv(); 
     for (String envName : env.keySet()) { 
      System.out.format("%s=%s%n", envName, env.get(envName)); 
     } 
    } 
} 
+4

¿Responde esto a la pregunta? Imprime una lista de las variables, no establece ninguna. – berry120

-1

sí, va a leer las variables de entorno. A continuación se muestra el código para establecer la variable de entorno utilizando ini4j.

import java.io.IOException; 
import org.ini4j.Reg; 


public class SettingWinEnvironmentUsing_ini4j { 

    public static void main(String args[]) 
    { 
     System.out.println("Setting System Environment Variables"); 

     Reg reg = new Reg(); 
     Reg.Key env = reg.add("HKEY_CURRENT_USER\\Environment"); 
     env.put("RR_PROPERTY_PATH", "c:\\path"); 
     try { 
      reg.write(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     System.out.println(env.get("RR_PROPERTY_PATH")); 
    } 
} 

puede encontrar el frasco ini4j en

http://cropforge.org/plugins/scmsvn/viewcvs.php/IAPlugin/lib/ini4j-0.5.2-SNAPSHOT.jar?rev=656&root=icisjavatools&view=log

Cuestiones relacionadas