it-swarm.it

Imposta più proprietà di sistema Java di Java

C'è un modo più semplice per specificare più proprietà di sistema sulla riga di comando in un Java anziché avere più istruzioni -D?

Cercando di evitare questo:

 Java -jar -DNAME="myName" -DVERSION="1.0" -DLOCATION="home" program.jar

Pensavo di aver visto un esempio di qualcuno che ne usa uno -D e qualche stringa tra virgolette dopo, ma non riesco a trovare di nuovo l'esempio.

59
Tyler DeWitt

La risposta è NO Potresti aver visto un esempio in cui qualcuno avrebbe impostato qualcosa del tipo:

-DArguments=a=1,b=2,c=3,d=4,e=cow

Quindi l'applicazione analizzerebbe il valore della stringa di proprietà Arguments per ottenere valori individuali. Nel tuo main puoi ottenere i valori chiave come (Supponendo che il formato di input sia garantito):

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]);
    }
}

Anche il -D dovrebbe trovarsi prima della classe principale o del file jar nella riga di comando Java. Esempio: Java -DArguments=a=1,b=2,c=3,d=4,e=cow MainClass

50
ring bearer

Invece di passare le proprietà come argomento, è possibile utilizzare un .properties per memorizzarle.

15
Dimitri

Non c'è nulla sul Documentazione che menziona qualcosa del genere.

Ecco una citazione:

-Dproperty = value Imposta un valore per la proprietà di sistema. Se value è una stringa che contiene spazi, è necessario racchiudere la stringa tra virgolette doppie:

Java -Dfoo = "some string" SomeClass

14
adarshr

Potresti essere in grado di utilizzare il Java_TOOL_OPTIONS variabile d'ambiente per impostare le opzioni. Ha funzionato per me con Rasbian. Vedi Variabili d'ambiente e proprietà del sistema che ha questo da dire:

In molti ambienti, la riga di comando non è facilmente accessibile per avviare l'applicazione con le opzioni della riga di comando necessarie.

Ciò accade spesso con applicazioni che utilizzano VM incorporate (nel senso che usano l'API di invocazione Java Native Interface (JNI) per avviare la VM) o in cui l'avvio è profondamente annidato negli script. la variabile d'ambiente Java_TOOL_OPTIONS può essere utile per aumentare una riga di comando.

Quando viene impostata questa variabile d'ambiente, la funzione JNI_CreateJavaVM (nell'API di richiamo JNI), la funzione JNI_CreateJavaVM aggiunge il valore della variabile d'ambiente alle opzioni fornite nell'argomento JavaVMInitArgs.

Tuttavia, questo uso di variabili di ambiente può essere disabilitato per motivi di sicurezza.

In alcuni casi, questa opzione è disabilitata per motivi di sicurezza. Ad esempio, sul sistema operativo Oracle Solaris, questa opzione è disabilitata quando l'ID utente o gruppo effettivo differisce dall'ID reale.

Vedi questo esempio che mostra la differenza tra specificare sulla riga di comando e usare Java_TOOL_OPTIONS variabile d'ambiente.

screenshot showing use of Java_TOOL_OPTIONS environment variable

4
Richard Chambers

Se le proprietà richieste devono essere impostate nel sistema, non esiste alcuna opzione rispetto a -D Ma se sono necessarie tali proprietà durante l'avvio di un'applicazione, il caricamento delle proprietà tramite i file delle proprietà è l'opzione migliore. Non sarà necessario modificare build per una singola proprietà.

1
SUKHDEV PATIL