Мы выполняем автономную java-программу из сценария оболочки, имея скрипт comman, указывающий путь к классам, путь и т. Д. В этом общем скрипте мы добавили несколько классов классов, а число символов больше 9000. Он отлично работает в тестовом режиме. Может ли это вызвать какую-либо проблему в «Производстве»? Есть ли ограничения в linux для установки classpath? Каков максимальный символ для входов командной строки ...Ограничение класса в Linux
ответ
См. this stackoverflow answer о максимальных длинах командной строки linux.
Максимальная длина командной строки будет примерно от 128 КБ до 2 МБ.
Максимальный размер любого аргумента значительно меньше, и 9000 символов могут быть проблематичными.
При использовании в вашем Java программы некоторые классы из jar
файла, указанного в переменной classpath
, то JVM не загружать этот класс, пока ваш запущенная программа не будет явно нужен этот класс (или если вы загрузить этот класс явно из вашего кода - та же идея). Единственная проблема, которая может возникнуть, когда у вас очень длинная classpath
, - это время, необходимое для проверки classpath
перед JVM найти нужный файл jar
. Но это не должно быть проблемой. Если ваша программа хорошо себя ведет в тестах, вы не должны беспокоиться об этом.
Нет, никаких ограничений нет. В 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 для создания списка зависимостей.
Я не согласен с тем, что в Linux нет ограничений. С более старым (2.6.5) ядром мы абсолютно достигли жесткого предела в 128 Кбайт для длины командной строки. – QuantumMechanic
... Linux никогда не перестает меня удивлять. ОК, исправление: реальные операционные системы не должны вызывать никаких проблем. :-) (я сделал необходимые изменения выше, спасибо QuantumMechanic) –
- 1. Ограничение класса в Eclipse
- 2. Ограничение пользователя linux в папку
- 3. Ограничение использования памяти в Linux
- 4. Ограничение класса и архетипы
- 5. ограничение шаблона класса
- 6. Измените ограничение целевого класса
- 7. Ограничение времени запуска программы в Linux
- 8. Ограничение использования файловой системы в Linux
- 9. Ошибка сборщика Linux «невозможное ограничение в« asm »
- 10. Ограничение типа для класса C#
- 11. Ограничение доступа к методам класса
- 12. Scala: Ограничение по типу класса
- 13. Ограничение анимации Angularjs для класса
- 14. Ограничение атрибута для определенного класса
- 15. Настройка класса Java в Linux?
- 16. ограничение класса в определении любезных данных
- 17. ограничение доступа к интерфейсу класса в java
- 18. Hibernate - ограничение для класса в списке
- 19. Ограничение доступа системного вызова для приложения Linux
- 20. Ограничение использования Python только для Linux
- 21. Как обойти ограничение «Слишком много аргументов» Linux
- 22. Ограничение памяти процесса/использование ЦП на Linux
- 23. Ограничение процессов по оперативной памяти под Linux
- 24. Как ядро linux обеспечивает ограничение размера стека?
- 25. Ограничение скорости подключения tcp java на linux
- 26. Что такое ограничение Swift на Linux?
- 27. Symfony проверка: Первое ограничение свойства, то ограничение класса
- 28. Hibernate Validator 4 автономный: ограничение класса ограничение кеширование
- 29. Ограничение или ограничение read_very_eager() в python
- 30. Ограничение базового класса для общего класса, определяющего сам класс
Err, тест env должен проверить, что все работает нормально, прежде чем делать то же самое в процессе производства. Если вы не доверяете своей тестовой среде, почему у вас ее есть? –
Существует ограничение на то, как долго могут быть переменные окружения, и существует ограничение на то, как долго может работать командная строка. Вы * можете * достичь как тех, кто имеет такую длину (не знаю конкретных чисел для любой ОС по камину). Возможно, вы захотите начать использовать [classpath wildcards] (http://docs.oracle.com/javase/7/docs/technotes/tools/windows/classpath.html). –
@ JB: Теоретически тестовые и производственные среды должны быть одинаковыми и теоретически, если один из них работает на тесте, он будет работать в процессе производства. Однако разница между теорией и практикой заключается в том, что в теории нет разницы между теорией и практикой. –