usar - Establecer varias propiedades del sistema Java línea de comandos
tutorial interfaz grafica java netbeans (5)
¿Hay una manera más fácil de especificar múltiples propiedades del sistema en la línea de comandos para un programa Java en lugar de tener varias declaraciones -D?
Tratando de evitar esto:
java -jar -DNAME="myName" -DVERSION="1.0" -DLOCATION="home" program.jar
Pensé que había visto un ejemplo de alguien que usa una -D
y algunas cadenas entre comillas después de eso, pero no puedo encontrar el ejemplo de nuevo.
En lugar de pasar las propiedades como un argumento, puede usar un .properties para almacenarlas.
Es posible que pueda usar la variable de entorno JAVA_TOOL_OPTIONS
para configurar las opciones. Me funcionó con Rasbian. Ver Variables de entorno y Propiedades del sistema que tiene esto para decir:
En muchos entornos, la línea de comandos no es fácilmente accesible para iniciar la aplicación con las opciones de línea de comandos necesarias.
Esto sucede a menudo con las aplicaciones que utilizan máquinas virtuales integradas (lo que significa que usan la API de invocación de la interfaz nativa de Java (JNI) para iniciar la máquina virtual) o donde el inicio está profundamente anidado en los scripts. En estos entornos, la variable de entorno JAVA_TOOL_OPTIONS puede ser útil para aumentar una línea de comando.
Cuando se establece esta variable de entorno, la función JNI_CreateJavaVM (en la API de invocación de JNI), la función JNI_CreateJavaVM agrega el valor de la variable de entorno a las opciones proporcionadas en su argumento JavaVMInitArgs.
Sin embargo, el uso de esta variable de entorno puede estar deshabilitado por razones de seguridad.
En algunos casos, esta opción está deshabilitada por razones de seguridad. Por ejemplo, en el sistema operativo Oracle Solaris, esta opción está deshabilitada cuando el ID de usuario o grupo efectivo difiere del ID real.
Vea este ejemplo que muestra la diferencia entre especificar en la línea de comando en lugar de usar la variable de entorno JAVA_TOOL_OPTIONS
.
La respuesta es NO. Es posible que haya visto un ejemplo en el que alguien hubiera establecido algo como:
-DArguments=a=1,b=2,c=3,d=4,e=cow
Luego, la aplicación analizaría el valor de la cadena de propiedades Arguments
para obtener valores individuales. En su main
puede obtener los valores clave como (suponiendo que el formato de entrada está garantizado):
String line = System.getProperty("Arguments");
if(line != null) {
String str[] = line.split(",");
for(int i=1;i<str.length;i++){
String arr[] = str[i].split("=");
System.out.println("Key = " + arr[0]);
System.out.println("Value = " + arr[1]);
}
}
Además, la -D
debe estar antes de la clase principal o del archivo jar
en la línea de comandos java. Ejemplo: java -DArguments=a=1,b=2,c=3,d=4,e=cow MainClass
No hay nada en la Documentation que mencione algo como eso.
Aquí hay una cita:
-Dproperty = valor Establecer un valor de propiedad del sistema. Si el valor es una cadena que contiene espacios, debe incluir la cadena entre comillas dobles:
java -Dfoo = "alguna cadena" SomeClass
Si las propiedades requeridas deben establecerse en el sistema, entonces no hay otra opción que la opción -D. Pero si necesita esas propiedades mientras ejecuta una aplicación, cargar las propiedades a través de los archivos de propiedades es la mejor opción. No será necesario cambiar la construcción para una sola propiedad.