Stiamo discutendo nel mio ufficio di ciò che può e non può andare in un file JAR. È stato suggerito che è una cattiva forma avere qualcosa che non è un file .class in un JAR. Al momento abbiamo alcune configurazioni XML per Ibatis/etc, alcuni file di proprietà .. il solito. Tuttavia, c'è una spinta per estrarre tutti questi file da JAR e inserirli nel file system locale di ogni macchina di distribuzione. Suona ragionevole?Va bene mettere i file di configurazione in JAR?
risposta
Non mi sembra ragionevole. Credo che la configurazione di alcune applicazioni dovrebbe essere nel file jar. Cose come mappature ORM, spring config, namespace primaverili personalizzati XSD, altri XSD, ecc. Dovrebbero essere nella maggior parte dei casi in jar. È una parte importante degli artefatti di dispiegamento.
Il fatto, che non è il file class
, non significa che dovrebbe essere estratto da jar solo perché è teoricamente possibile modificarlo senza creare un nuovo jar. Potete immaginare una modifica di * .hbm.xml in produzione? per me suona molto spaventoso.
Penso che alcune configurazioni, come spring xml, siano intese nella maggior parte dei casi per organizzare meglio l'applicazione e le dipendenze, ma non per cambiarle in fase di esecuzione in produzione.
Se si apportano modifiche in un file di configurazione all'interno di un JAR (anche senza modificare alcuna riga di codice Java), l'intero JAR deve essere ricostruito e ridistribuito. Suona ragionevole?
A volte non si desidera che le persone apportino modifiche a un file di configurazione, ad esempio se la configurazione è specifica per l'ambiente. – Qwerky
Volete o aspettatevi che vengano modificati senza una nuova versione del codice? Quindi è necessario estrarli.
Se la risposta alla domanda in nient'altro che non dovrebbe estrarli, in quanto consentirebbe al supporto di armeggiare con loro senza passare attraverso il processo di rilascio. (Naturalmente questo è possibile anche se sono nel barattolo, ma un po 'meno allettante.)
Aggiornamento: Ma dal momento che lei ha citato più macchine di distribuzione, c'è una terza opzione: estrarli e metterli in una zona comunemente accessibili su un disco di rete. I file di configurazione modificabili manualmente che sono replicati su più macchine (ma dovrebbero essere identici) sono famosi per non essere sincronizzati.
è cattiva forma di avere tutto ciò che non è un file .class andare in un JAR
Che è una sciocchezza. È in effetti molto buono modulo per mettere risorse come icone e altri file di dati che l'utente ha utilizzato dal codice nel JAR insieme al codice. Questo è quello che i metodi getResource()
e Class
e ClassLoader
sono per, e rende le applicazioni molto più robuste rispetto a fare confusione con i percorsi delle risorse manualmente.
Tuttavia, i file di configurazione sono probabilmente diversi. Se sono destinati a essere modificati durante o dopo la distribuzione, quindi averli in un file JAR è piuttosto scomodo e preferirli averli in una directory separata.
Gli strumenti ORM (come Hibernate o IBatis) non dovrebbero essere modificati una volta distribuita l'applicazione. Quindi, no, direi che non ha senso per quel tipo di file.
A seconda delle esigenze, i file di configurazione a livello di applicazione possono essere posizionati all'esterno di Jar/War in modo che possano essere modificati senza dover ricostruire il jar. Tieni presente che modificare i parametri dell'applicazione in produzione è, imho, una cattiva pratica. Le modifiche dovrebbero essere testate prima in alcuni ambienti di pre-produzione.
E 'assolutamente OK per mettere i file non di classe in un file JAR, in particolare le risorse che le esigenze applicative (immagini, stringhe localizzate, etc.) Sapendo questo, è necessario decidere quale scenario si adatta alla situazione:
- Se la configurazione è fissa e cambierà solo quando viene distribuito un nuovo file JAR, inserirlo nel JAR.
- Se la configurazione deve essere modificata, manualmente o dall'applicazione, memorizzarla sul filesystem.
Se si sceglie quest'ultima, si noti che è buona pratica includere una configurazione di default nel file JAR per gestire il caso in cui il file di configurazione esterno mancante. Il valore predefinito può essere caricato direttamente dal JAR o copiato nel filesystem per diventare la nuova configurazione modificabile.
- 1. Va bene confrontare i valori di PEPROCESS?
- 2. memcacheD Va bene?
- 3. Va bene caricare file non di codice in GitHub?
- 4. Va bene liberare 'void *'?
- 5. Va bene mettere "using std :: swap;" in un colpo di testa?
- 6. string [length()] in C++, va bene?
- 7. va bene "ripetutamente" xss-pulire i dati in CodeIgniter?
- 8. Va bene avere parentesi nell'URL?
- 9. Stringhe casuali in Python 2.6 (Va bene?)
- 10. Va bene usare target = "_ blank" in HTML5?
- 11. Va bene usare l'array [chiave] in PHP?
- 12. In JavaScript, l'assegnazione concatenata va bene?
- 13. Va bene usare LinearLayout invece di FrameLayout?
- 14. Va bene chiamare clearInterval() prima di setInterval()?
- 15. A cosa non va bene ASP.NET MVC?
- 16. Java -jar: accesso al file di configurazione esterno
- 17. Va bene avere un file .htaccess molto lungo?
- 18. Va bene restituire None da __new__?
- 19. Va bene aggiungere i propri attributi agli elementi HTML?
- 20. Perché non va bene che le variabili siano globali ma va bene per le funzioni?
- 21. ApplicationContext.getBean (Classe Clazz) non va bene con i proxy
- 22. Come impedire a sbt-native-packager di mettere le mie risorse in un file jar?
- 23. Dove mettere un file di configurazione in Python?
- 24. Va bene implementare Modernizr con Twitter Bootstrap?
- 25. Va bene lanciare gli eventi da Dispose()?
- 26. Va bene non chiamare Thread # join?
- 27. Java - Configurazione file di proprietà Spring per il file jar
- 28. Va bene avere un tag di ancoraggio vuoto?
- 29. È ambiguo o va perfettamente bene?
- 30. Va bene usare AWT con JavaFx?
Si tratta della questione se questi file debbano essere modificati dall'utente finale dell'applicazione o se esistono direttive di configurazione dipendenti dalla macchina. – SirDarius