Stiamo eseguendo il programma Java autonomo dallo script di shell, con uno script comman per menzionare classpath, path, ecc. In questo script comune, sono stati aggiunti diversi classpath e il numero di caratteri è più di 9000. Sta funzionando bene nel test env. Causerà qualche problema in produzione? C'è qualche limite in Linux per impostare classpath? Qual è il max char per gli input da riga di comando ...Limitazione del percorso di classe in Linux
risposta
Vedere this stackoverflow answer sulla lunghezza massima della riga di comando di Linux.
La lunghezza massima della riga di comando sarà all'incirca tra 128 KB e 2 MB.
La dimensione massima di qualsiasi argomento è considerevolmente più piccola, tuttavia, e 9000 caratteri potrebbero essere problematici.
Quando si utilizza nel programma Java alcune classi da un file jar
che è specificato nella variabile classpath
, il JVM sarà non caricare ramo fino a quando il vostro programma in esecuzione avrà esplicitamente bisogno di quella classe (o se si carica quella classe esplicitamente dal tuo codice - la stessa idea). L'unico problema che può apparire quando hai un tempo molto lungo classpath
, è il tempo necessario per il controllo classpath
prima che lo JVM trovi il file giusto jar
. Ma questo non dovrebbe essere un problema. Se il tuo programma si comporta bene nei test, non dovresti preoccuparti di questo.
No, non ci sono limiti. In Windows c'è (8191 caratteri), ma non sotto Linux. Lavoriamo con il concetto di file classpath. Questi elenchi di file tutte le dipendenze per l'applicazione, ad esempio:
...
libs/org/easymock/easymock/2.2/easymock-2.2.jar
libs/org/hamcrest/hamcrest-core/1.1/hamcrest-core-1.1.jar
libs/org/hibernate/hibernate-envers/4.1.0.Final/hibernate-envers-4.1.0.Final.jar
libs/com/google/inject/guice/3.0/guice-3.0.jar
...
e poi convertirlo in classpath utilizzabile ed eseguire l'applicazione come segue:
#!/bin/bash
CLASSPATH_FILE=`ls -r1 ${APP-HOME}/classpaths/myapp*.classpath | head -n1`
CLASSPATH=$(cat $CLASSPATH_FILE | sed 's_^libs_ ${APP-HOME}/libs_' | tr -d '\n' | tr -d '\r' | sed 's_.jar/libs/_.jar:/libs/_g' | sed 's_.pom/libs/_.pom:/libs/_g')
java -d64 -cp $CLASSPATH com.blah.main.Main [email protected]
Non abbiamo mai incorrere in problemi e questi classpath le voci diventano piuttosto enormi.
MODIFICA: come nota a margine, è possibile utilizzare il plug-in Maven dependency per generare un elenco di dipendenze.
Non sono d'accordo che non ci siano limiti in Linux. Con un kernel precedente (2.6.5) abbiamo assolutamente raggiunto un limite rigido di 128 KB per la lunghezza della riga di comando. – QuantumMechanic
... Linux non smette mai di stupirmi. OK, la correzione allora: i sistemi operativi reali non dovrebbero darti alcun problema. :-) (Ho apportato le modifiche richieste sopra, grazie a QuantumMechanic) –
- 1. Limitazione del tempo di esecuzione di un programma in Linux
- 2. impostazione percorso classe Java in linux?
- 3. Limitazione del numero di nodi
- 4. Impostazione del percorso di limitazione delle collisioni di un UIView in iOS 9
- 5. Risorsa del percorso di classe nel barattolo
- 6. Logica del percorso di installazione dei pacchetti R sotto Linux
- 7. Limitazione di Mono Runtime
- 8. Ottenere il percorso di classe del file in esecuzione
- 9. Percorso libreria Ubuntu Linux
- 10. Ottenere inode dal percorso in Linux Kernel
- 11. Percorso classe classe manifest di Apache?
- 12. Errore di limitazione del carico DataTable()
- 13. Come affrontare il conflitto del percorso di classe
- 14. Django: Limitazione del numero di relazioni in una relazione OneMany
- 15. limitazione dimensioni/lunghezza del tipo di array in PostgreSQL
- 16. limitazione del set di caratteri in un campo Textinput
- 17. Limitazione FILESTREAM SQL Server
- 18. L'opzione java -jar altera le opzioni del percorso di classe
- 19. Percorso classe Eclipse per Android - desidera aggiungere il percorso contenitore del percorso classe ma eclipse non mi consente
- 20. Percorso classe ant Ordine
- 21. Larghezza tabella di limitazione
- 22. Come ottenere il percorso di un processo in Unix/Linux
- 23. Limitazione del risultato della query per subquery
- 24. Ordine di abbinamento del percorso del percorso del pallone
- 25. Limitazione dell'utilizzo della CPU del Worker Web?
- 26. impostazione del percorso di classe per una classe di nuova iniezione
- 27. limitazione di PhoneGap: Build
- 28. Limitazione della larghezza di banda in Python
- 29. Stampa percorso classe bundle OSGI?
- 30. Lunghezza del campo di limitazione durante la richiesta di Elasticsearch
Err, il test env è lì per verificare che tutto funzioni correttamente prima di fare la stessa cosa in produzione. Se non ti fidi del tuo ambiente di test, perché ne hai uno? –
C'è una limitazione sulla durata delle variabili di ambiente e c'è una limitazione sulla durata della riga di comando. Potresti * raggiungere entrambi quelli con quel tipo di lunghezza (non conosci i numeri concreti per ogni sistema operativo per focolare). Si potrebbe voler iniziare a utilizzare [caratteri jolly classpath] (http://docs.oracle.com/javase/7/docs/technotes/tools/windows/classpath.html). –
@JB: In teoria, gli ambienti di test e di produzione dovrebbero essere gli stessi e, in teoria, se uno funziona in prova, funzionerà in produzione. Tuttavia, la differenza tra teoria e pratica è che in teoria non c'è differenza tra teoria e pratica. –