Wykonujemy autonomiczny program java ze skryptu powłoki, mając skrypt komand, aby wymienić ścieżkę klas, ścieżkę itp. W tym popularnym skrypcie dodaliśmy kilka ścieżek klas, a liczba znaków przekracza 9000. Działa dobrze w środowisku testowym. Czy spowoduje to jakiś problem w produkcji? Jakieś ograniczenia w Linuksie, aby ustawić ścieżkę klas? Jaki jest maksymalny znak dla wejść linii poleceń ...Ograniczenie klasy ścieżka w Linuksie
Odpowiedz
Zobacz this stackoverflow answer o maksymalnej długości linii poleceń Linuksa.
Maksymalna długość linii poleceń będzie wynosić mniej więcej od 128 KB do 2 MB.
Maksymalny rozmiar jednego argumentu jest znacznie mniejszy, a 9000 znaków może być problematycznym.
Podczas korzystania w programie Java niektóre klasy z pliku jar
, który jest określony w zmiennej classpath
The JVM nie będzie załadować tę klasę aż program uruchomiony zostanie wyraźnie potrzebują tej klasy (lub jeśli wczytaj tę klasę bezpośrednio ze swojego kodu - ten sam pomysł). Jedynym problemem, który może się pojawić, gdy masz bardzo długi numer classpath
, jest czas na sprawdzenie przed przed znalezieniem odpowiedniego pliku. Ale to nie powinno stanowić problemu. Jeśli Twój program zachowuje się dobrze podczas testów, nie powinieneś się tym martwić.
Nie, nie ma ograniczenia. W Windowsie jest (8191 znaków), ale nie pod Linuksem. Pracujemy z pojęciem plików klasy classpath. Te listy plików wszystkich zależności dla aplikacji, np:
...
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
...
a potem przekonwertować to do użytkowej ścieżce klasy i uruchomić aplikację w następujący sposób:
#!/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]
Nigdy nie napotkasz problemy i te ścieżki klasy wpisy są naprawdę ogromne.
EDYCJA: Na marginesie, można użyć wtyczki dependency do wygenerowania listy zależności.
Nie zgadzam się, że nie ma ograniczeń w Linuksie. W starszym jądrze (2.6.5) absolutnie osiągnęliśmy twardy limit 128 KB dla długości linii poleceń. – QuantumMechanic
... Linux nigdy nie przestaje mnie zadziwiać. OK, korekta: prawdziwe systemy operacyjne nie powinny sprawiać żadnych problemów. :-) (Dokonałem wymaganych zmian powyżej, dzięki QuantumMechanic) –
- 1. Ograniczenie klasy szablonów
- 2. Ścieżka klasy Java - Linux
- 3. użycie zaćmienie ścieżka klasy w mrówek zadań
- 4. Ścieżka klasy zawiera wiele powiązań SLF4J
- 5. Podwójne ogólne ograniczenie klasy w Javie: extends ConcreteClass & I
- 6. Programowanie w Swift na Linuksie
- 7. Obsługa wyjątków w Linuksie
- 8. Programowanie USB w Linuksie
- 9. Google protobuf w Linuksie
- 10. Konfigurowanie Mysql ++ w Linuksie
- 11. Buforowanie DNS w Linuksie
- 12. Wyłącz historia w Linuksie
- 13. Multitouch w Linuksie
- 14. Rozwój Bada w Linuksie
- 15. Ścieżka źródłowa witryny w CodeIgniter
- 16. polimorficzne ograniczenie
- 17. względna ścieżka pliku w RSpec
- 18. Generic typu ograniczenie nowych() i abstrakcyjnym bazowej klasy
- 19. Ścieżka systemowa kontra Sys.getenv ('ŚCIEŻKA')
- 20. Czy można kontrolować skanowanie w klasie Ścieżka?
- 21. Mrówka, pliki JAR i Ścieżka Klasy oh my
- 22. Archiwum, do którego odwołuje się ścieżka klasy, nie istnieje
- 23. Maven SLF4J: Ścieżka klasy zawiera wiele powiązań SLF4J
- 24. dekodowanie aac-a w Linuksie
- 25. Jak zrobić jar w Linuksie?
- 26. jak włączyć cutil.h w Linuksie
- 27. pliki Run .pkg w Linuksie
- 28. I2C odpytywanie polub w Linuksie
- 29. Skompiluj skrypt Pythona w Linuksie
- 30. Profil HFP/HSP w Linuksie
Err, test env jest po to, aby potwierdzić, że wszystko działa dobrze, zanim zrobi się to samo w produkcji. Jeśli nie ufasz swojemu środowisku testowemu, dlaczego go masz? –
Istnieje ograniczenie dotyczące długości zmiennych środowiskowych i ograniczenia długości linii poleceń. Ty * możesz * dotrzeć do obu osób o takiej długości (nie znasz konkretnych liczb dla jakiegokolwiek systemu operacyjnego na podstawie paleniska). Możesz zacząć używać [wildcards classpath] (http://docs.oracle.com/javase/7/docs/technotes/tools/windows/classpath.html). –
@JB: Teoretycznie środowiska testowe i produkcyjne powinny być takie same i teoretycznie, jeśli test będzie działał w teście, będzie działał w produkcji. Jednak różnica między teorią a praktyką polega na tym, że teoretycznie nie ma różnicy między teorią a praktyką. –