2012-06-28 3 views
5

Мы выполняем автономную java-программу из сценария оболочки, имея скрипт comman, указывающий путь к классам, путь и т. Д. В этом общем скрипте мы добавили несколько классов классов, а число символов больше 9000. Он отлично работает в тестовом режиме. Может ли это вызвать какую-либо проблему в «Производстве»? Есть ли ограничения в linux для установки classpath? Каков максимальный символ для входов командной строки ...Ограничение класса в Linux

+1

Err, тест env должен проверить, что все работает нормально, прежде чем делать то же самое в процессе производства. Если вы не доверяете своей тестовой среде, почему у вас ее есть? –

+2

Существует ограничение на то, как долго могут быть переменные окружения, и существует ограничение на то, как долго может работать командная строка. Вы * можете * достичь как тех, кто имеет такую ​​длину (не знаю конкретных чисел для любой ОС по камину). Возможно, вы захотите начать использовать [classpath wildcards] (http://docs.oracle.com/javase/7/docs/technotes/tools/windows/classpath.html). –

+1

@ JB: Теоретически тестовые и производственные среды должны быть одинаковыми и теоретически, если один из них работает на тесте, он будет работать в процессе производства. Однако разница между теорией и практикой заключается в том, что в теории нет разницы между теорией и практикой. –

ответ

0

См. this stackoverflow answer о максимальных длинах командной строки linux.

Максимальная длина командной строки будет примерно от 128 КБ до 2 МБ.

Максимальный размер любого аргумента значительно меньше, и 9000 символов могут быть проблематичными.

0

При использовании в вашем Java программы некоторые классы из jar файла, указанного в переменной classpath, то JVM не загружать этот класс, пока ваш запущенная программа не будет явно нужен этот класс (или если вы загрузить этот класс явно из вашего кода - та же идея). Единственная проблема, которая может возникнуть, когда у вас очень длинная classpath, - это время, необходимое для проверки classpath перед JVM найти нужный файл jar. Но это не должно быть проблемой. Если ваша программа хорошо себя ведет в тестах, вы не должны беспокоиться об этом.

4

Нет, никаких ограничений нет. В Windows есть (8191 символ), но не под Linux. Мы работаем с концепцией classpath-файлов. Эти файловые списки всех зависимостей для приложения, например:

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

, а затем мы превращаем это в пригодные классы и запустить приложение следующее образом:

#!/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] 

Мы никогда не столкнуться с проблемами, и эти путями к классам записи становятся довольно огромными.

EDIT: в качестве примечания вы можете использовать плагин зависимости maven для создания списка зависимостей.

+3

Я не согласен с тем, что в Linux нет ограничений. С более старым (2.6.5) ядром мы абсолютно достигли жесткого предела в 128 Кбайт для длины командной строки. – QuantumMechanic

+0

... Linux никогда не перестает меня удивлять. ОК, исправление: реальные операционные системы не должны вызывать никаких проблем. :-) (я сделал необходимые изменения выше, спасибо QuantumMechanic) –

Смежные вопросы