2012-06-28 12 views
5

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

+1

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? –

+2

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). –

+1

@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ą. –

Odpowiedz

0

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.

0

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ć.

4

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.

+3

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

+0

... 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) –