우리는 쉘 스크립트에서 클래스 패스, 경로 등을 언급하는 커맨드 스크립트가있는 독립형 자바 프로그램을 실행하고 있습니다.이 공통 스크립트에서 지금 우리는 몇 개의 클래스 패스를 추가했으며 문자의 수는 9000 개를 넘었습니다. 테스트 환경에서 올바르게 작동합니다. 프로덕션에서 문제가 발생합니까? 어떤 제한 사항이 리눅스에서 classpath를 설정합니까? 명령 행 입력에 대한 최대 문자는 무엇입니까 ...리눅스에서 클래스 패스 제한
답변
최대 Linux 명령 행 길이에 대해서는 this stackoverflow answer을 참조하십시오.
최대 명령 줄 길이는 대략 128KB에서 2MB 사이입니다.
하나의 인수의 최대 크기는 상당히 작지만 9000 개의 문자는 문제가 될 수 있습니다. 당신이 당신의 자바 프로그램에서 사용하는 경우
은 classpath
변수에 지정된 jar
파일의 일부 클래스는 JVM는 실행중인 프로그램이 명시 적으로 클래스가 필요합니다 때까지 클래스를로드 (또는 경우하지 않습니다 코드에서 클래스를 명시 적으로로드 - 동일한 아이디어). classpath
이 매우 길 때만 나타날 수있는 유일한 문제는 classpath
확인 전에 JVM이 올바른 jar
파일을 찾는데 필요한 시간입니다. 그러나 그것은 문제가되어서는 안됩니다. 프로그램이 테스트에서 잘 작동한다면, 걱정할 필요가 없습니다.
아니요, 제한이 없습니다. Windows에는 (8191 자) 있지만 Linux에서는 그렇지 않습니다. 우리는 classpath-files의 개념을 가지고 작업한다. 이 파일에는 응용 프로그램에 대한 모든 종속 예 :
...
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 dependency plugin을 사용하여 종속성 목록을 생성 할 수 있습니다.
나는 Linux에는 제한이 없다고 동의한다. 구형 커널 (2.6.5)에서는 명령 행 길이에 대해 128KB의 하드 한계를 맞았습니다. – QuantumMechanic
... 리눅스는 절대로 나를 놀라게하지 않습니다. OK, correct then : 실제 운영 체제가 문제를 일으키지 않아야합니다. :-) (필자는 위의 필수 변경 사항을 만들었습니다. 감사합니다 QuantumMechanic) –
- 1. 개미 클래스 패스 수정하기
- 2. 자바 클래스 패스 문제
- 3. RED5 오류 - 클래스 패스
- 4. 패스 다른 클래스 이름
- 5. 개미 빌드의 클래스 패스
- 6. Netbeans의 OpenCV 클래스 패스
- 7. 클래스 패스 컴파일
- 8. javah의 클래스 패스
- 9. 자바 클래스 패스 문제
- 10. jQuery 패스 값 클래스
- 11. 클래스 패스 이전 JAR의 대체 클래스
- 12. jar 내의 클래스 패스 리소스
- 13. 개미의 클래스 패스 설정 문제
- 14. 자바 클래스 패스 관련 질의
- 15. Maven Eclipse 클래스 패스 오류
- 16. PHP 의존성과 클래스 패스 관리
- 17. java -jar 클래스 패스 문제
- 18. Unwieldy Java 클래스 패스 축소
- 19. 리눅스에서 응용 프로그램 디버깅을위한 리소스 사용 제한.
- 20. 리눅스에서 프로세스 메모리/CPU 사용량 제한
- 21. 패스
- 22. 파이썬 클래스 세터 제한
- 23. .NET Stopwatch 클래스 제한
- 24. 템플릿 클래스 제한
- 25. Eclipse의 클래스 제한
- 26. 하위 클래스 선언 제한
- 27. 에이전트 클래스 패스 설정 - 그라인더 Java
- 28. 또 다른 Ant + JUnit 클래스 패스 문제
- 29. Clojure 상자 : 클래스 패스 문제 (멍청한 질문)
- 30. 클래스 패스 자바에 json jar 추가하기
오류가 발생했습니다. 테스트 환경에서는 동일한 작업을 수행하기 전에 모든 것이 올바르게 작동하는지 확인합니다. 테스트 환경을 신뢰할 수 없다면 왜 테스트 환경을 가지고 있습니까? –
환경 변수의 길이에 제한이 있으며 명령 줄의 길이에 제한이 있습니다. 당신은 * 그 종류의 길이를 가진 이들 모두에게 접근 할 수 있습니다 (난로로 모든 OS에 대한 구체적인 숫자를 알지 못합니다). [classpath 와일드 카드] (http://docs.oracle.com/javase/7/docs/technotes/tools/windows/classpath.html)를 사용하여 시작할 수 있습니다. –
@JB : 이론적으로 테스트 환경과 프로덕션 환경은 동일해야하며 이론적으로는 테스트 환경에서 작동한다면 이론적으로는 생산 환경에서 작동합니다. 그러나 이론과 실습의 차이점은 이론적으로 이론과 실습간에 차이가 없다는 것입니다. –