ClassPath, Java Buld Path (Eclipse) 및 Web-Inf lib : 무엇을 사용해야하는지, 왜, 왜?

StackOverflow https://stackoverflow.com/questions/1821571

문제

나는 최근 .NET에서 J2EE로 전환했으며 JAR 파일을 어디에 두어야하는지 혼란 스러웠습니다. ClassPath, Web-INF 및 Eclipse의 Java 웹 경로는 모두 항아리를 저장할 수있는 곳이지만 어떤 폴더를 사용할 때, 왜 그런지에 대해 혼란스러워합니다.

우선, 우리는 클래스 경로가 있습니다. 나는 보통 "내 컴퓨터"내부의 "환경 변수"로 들어가서 이것을 설정했습니다. 나는 이것이 Java 컴파일러가 JAR 파일을 찾는 기본 장소라는 것을 알고 있습니다. ClassPath 환경 변수에 폴더 나 항아리를 추가하면 Eclipse, Java 컴파일러 및 웹 서버로 무시되는 이유는 무엇입니까?

또한 Web-Inf lib는 웹 앱이 사용할 Jar 파일을 넣을 수있는 곳이라는 것을 알고 있습니다. 그러나 나는 항아리를 Web-inf lib에 넣었습니다. 어떤 상황에서 항아리를 Web-inf lib 폴더에 넣어야합니까? Eclipse 또는 Web Server를 알아 차리면 어떻게해야합니까?

지금까지 나를 위해 일하는 유일한 것은 일식 프로젝트를위한 Java 빌드 경로를 실제로 변경하는 것입니다. 필요한 항아리를 선택하고 "외부 항아리 추가"를 누르겠습니다. 내가이 일을 할 때 대부분의 시간에 Eclipse는 내 항아리를 인식하고 그 안에있는 수업을 읽을 것입니다. 그러나, 나는 이것을하는 동안 많은 이상한 임의의 오류를 겪습니다 (대부분 의존성과 관련이 있습니다). 어떤 이유로, 나는 이것이 일을하는 올바른 방법이 아니며 중요한 정보를 놓치고 있다는 느낌을받습니다. Eclipse 내부에서 외부 항아리를 수동으로 추가해야하며 언제 다른 일을해야합니까? Eclipse의 Java 빌드 경로는 어떻게 ClassPath 환경 변수의 폴더에 대해 알지 못하는 것 같습니다.

정말로, 나는 클래스 경로, Eclipse의 Java 빌드 경로 및 Web-Inf/Lib 폴더에 대해 더 잘 이해하고 싶습니다. 상황. 나는 당신이 나에게 줄 수있는 모든 조언이나 당신이 추천 할 수있는 기사에 감사드립니다.

고맙습니다.

도움이 되었습니까?

해결책

그만큼 CLASSPATH 환경에서 설정하면 독립형 Java 응용 프로그램, 즉 명령 프롬프트 또는 아이콘에서 실행되는 응용 프로그램에만 영향을 미칩니다. 알다시피, Eclipse는 이것을 무시합니다. 프로젝트 당 클래스 경로를 설정합니다.

javac 그리고 java, 명령 프롬프트에서 호출되면이 경로를 존중해야하지만 더 이상이를 수행하는 것은 더 이상 훌륭한 관행으로 간주되지 않습니다. 모든 앱에는 고유 한 물건 세트가 필요하다는 것이 밝혀 졌으므로 글로벌 클래스 경로는 실제로 그 중 어느 것도하지 않습니다. 현대의 관행은 단순히 클래스 경로를 -cp 명령 줄의 옵션 javac 또는 java.

독립형 웹 애플리케이션 서버도 자체 클래스 경로를 설정합니다. 명령 행 또는 GUI에서 WebAppServers는 일반적으로 스크립트로 시작됩니다..BAT 또는 .sh) 사용을 사용하여 클래스 경로를 설정합니다 -cp. Tomcat에는 호출 된 디렉토리가 있습니다 common 또는 common/lib 서버와 그 아래에서 실행되는 모든 프로그램을 사용할 수있는 라이브러리를 볼 것으로 예상됩니다. 그러나 당신은 일반적으로 자신의 도서관 수집금을 제공하기위한 맞춤형이기 때문에 이것을 엉망으로 만들 필요는 없습니다. WEB-INF/lib.

웹 앱의 경우 varous 항아리를 lib 디렉토리 WEB-INF, 이클립스는 그러한 디렉토리 구조를 사전 건설한다고 가정합니다.

당신이 필요로하는 모든 libs도 일식으로 알려져야합니다. Project Explorer에서 한 번에 전체 슬리트를 선택하고 마우스 오른쪽 버튼을 클릭하고 선택합니다. Build Path | add to build path. Eclipse의 프로젝트 빌드 경로를 수동으로 엉망으로 만드는 것보다 쉽습니다.

다른 팁

Java는 오랜 역사를 가지고 있으며 경험은 일부 아이디어가 좋고 일부는 나빴다는 것을 보여주었습니다.

ClassPath Environment 변수는 Java Machine에 프로그램에서 클래스를 찾는 위치를 알려주는 초기 방법이며 명령 줄 프로그램에 대해 합리적으로 잘 작동합니다. 이것은 글로벌 일이 아니라 (장기적으로 물건을 엉망으로 만드는 경향이 있기 때문에) 프로그래밍당 일이어야한다는 것이 빠르게 발견되었습니다. 변수를 설정하고 Java 머신을 실행하는 래퍼 스크립트/배트 파일을 만들어 수행 할 수 있습니다.

모든 것이 잘되었고, 사람들은 Java로 웹 서버를 작성하고 싶었습니다. Servlet API는 웹 응용 프로그램이 독립형 단위 인 경우에 만들어졌습니다. 웹 응용 프로그램 ~이다 Web-Inf/클래스에서 포장되지 않은 파일과 Web-Inf/Lib의 Jar-Files. 그리고 그만. 이는 글로벌 클래스 경로 변수가 무시되었음을 의미합니다. 이것은 a 매우 좋은 점이 있으므로 개념은 다른 곳으로 마이그레이션되었습니다.

예를 들어 "java -jar foobar.jar"로 호출되는 "실행 가능한 JAR"(Eclipse가 "runnable jar"라고 부름)에는 특수 매니페스트 파일에 JAR 내부의 전체 클래스 경로가 포함되어 있습니다. 웹 서버에서 Java 프로그램을 시작하는 데 사용되는 Java Web Start는 서버의 구성 파일에 전체 클래스 경로를 나열합니다.

그러나 당신을 시작하기 위해. Java 웹 응용 프로그램을 작성하려면 :

  1. 일식을 얻으십시오 자바 ee 버전.
  2. Foobar라는 새로운 동적 웹 프로젝트를 만듭니다.
  3. DRAW 및 DROP (또는 복사/붙여 넣기) FOOBAR/WEBCONTENT/WEB-INF/LIB에서 필요한 JAR 파일
  4. foobar/webContent/index.jsp라는 새 파일을 만듭니다. 빈 파일 유형에서 <h1>Hello World <%= new java.util.Date() %></h1>
  5. index.jsp의 편집기를 마우스 오른쪽 버튼으로 클릭하고 서버에서 실행 -> 실행을 선택하고 LocalHost 서버에서 기본 -> J2EE 미리보기를 선택하고 완료하십시오.

브라우저 창이 이제 브라우저 나 Eclipse 내에서 JSP-PAGE를 렌더링합니다. JSP-PAGE를 변경하고 CTRL-S로 저장하고 브라우저 창을 다시로드하여 변경 사항을 확인할 수 있습니다.

또한 Web-Inf lib는 웹 앱이 사용할 Jar 파일을 넣을 수있는 곳이라는 것을 알고 있습니다. 그러나 나는 항아리를 Web-inf lib에 넣었습니다. 어떤 상황에서 항아리를 Web-inf lib 폴더에 넣어야합니까? Eclipse 또는 Web Server를 알아 차리면 어떻게해야합니까?

그만큼 진짜 여기에있는 문제는 당신이 얻지 못했을 가능성이 높습니다. 자바를위한 일식 EE 개발자 그리고/또는 방금 제네릭을 만들었습니다 자바 프로젝트 대신 a 동적 웹 프로젝트 필요한 폴더 구조를 직접 구축했습니다.

당신이 a 동적 웹 프로젝트 안에 Java EE 개발자를위한 일식, 그런 다음 Eclipse는 모든 라이브러리를 자동으로 추가합니다 WEB-INF/lib ~로 빌드 경로. 그만큼 빌드 경로 컴파일 타임과 런타임 모두에서 사용되는 클래스 경로 만 대략적으로 말합니다. 다시 말해서, 제 3 자 항아리를 떨어 뜨리면 더 이상 할 필요가 없습니다.

Java는 사례 민감성이므로 실제로 호출해야합니다. WEB-INF/lib, 아니다 WEB-INF/LIB. 그러나 어쨌든, 당신이 a 동적 웹 프로젝트, Eclipse는 귀하를 위해 올바른 폴더/파일 구조를 자동으로 생성합니다.

다른 사람들이 말했듯이, 무시하십시오 %CLASSPATH% 환경 변수. 그것은이다 javac.exe/java.exe에 의해 사용됩니다 당신이 할 때 ~ 아니다 모든 것을 지정합니다 -cp, -classpath 또는 -jar 논쟁. 실제 세계 에서이 환경 변수는 거의 사용되지 않습니다. 우선 초보자에게는 편리함이 있습니다 (불행히도 가장 혼란스러운 것도 발명해서는 안됩니다).

웹 애플리케이션을 다루는 경우 /Web-Inf /Lib가 항아리를 넣을 수있는 휴대용 장소입니다. 이것은 어디에 있습니다 웹 서버 서블릿 컨테이너는 응용 프로그램의 JAR 파일을 찾을 것으로 예상됩니다.

Eclipse에서는 라이브러리, JAR 파일 (속성 -> Java 빌드 경로 -> 라이브러리 탭)의 경로를 지정해야합니다. 이것은 .classpath 프로젝트 파일에서 찾을 수 있습니다.

일반적으로 당신은 경로에 jre libs를 가지고 있기 때문에 (클래스 경로에도있을 것입니다), 클래스 경로에 Libs를 추가하고 Eclipse 빌드 경로를 업데이트하는 것이 효과가 있습니다.

Web-INF 디렉토리는 웹 응용 프로그램에 필요한 정보가 포함 된 장소 여야합니다.

나는 Eclipse 전문가는 아니지만 귀하의 문제가 다음과 같이 대답 할 수 있다고 생각합니다.

1) ClassPath는 Java 프로그램을 시작할 때 읽는 환경 변수이며 클래스가 배치되는 위치를 파악하기 위해 ClassLoader에서 사용합니다.

스크립트에서 Java 프로그램을 시작할 때만 ClassPath 변수를 수정합니다.이를 통해 프로그램을 편리하게 시작하고 클래스를 찾을 수 있는지 확인할 수 있습니다. 웹 애플리케이션을 개발하고 있기 때문에 그렇지 않습니다.

2) Web-Inf/Lib는 웹 애플리케이션 컨테이너 클래스 로더 (Tomcat 또는 Glassfish 등)가 웹 애플리케이션이 클래스를 해결 해야하는지 여부를 조사하는 디렉토리입니다. 따라서 웹 응용 프로그램에 사용되는 클래스를 배치합니다.

일부 IDE에는 프로젝트에서 패키지에 자동으로 사용하는 라이브러리/.jar 파일이 포함됩니다.

3) 개발 시간 동안 일식 라이브러리/클래스 경로 해결. 나는 당신이 라이브러리를 정의 할 수 있고 (외부 .jar 파일을 프로젝트에 추가)하고 자동 완성 된/다른 모든 흥미로운 기능은 이것으로 작업을 시작해야한다고 가정하지만 사과하는 것은 사과합니다. 당신은 기본적으로 해당 클래스를 해당 활동으로 IDE를 위해 볼 수있게합니다. 또한 IDE에 의해 해당 라이브러리를 웹 프로젝트 등에 자동으로 추가하도록 표시 할 수 있다고 가정합니다.

일반적으로 실행 중에 수업이 발견되는 방법에 대한 좋은 독서는 여기 (태양의 공식 문서입니다). 또한 이것에 대해 읽을 수있는 좋은 장소는 클래스 로더 클래스 문서입니다.

댓글을 함께 사용하면 저에게도 도움이되었습니다. Eclipse에서 빌드 경로에 모든 Jena .jars를 추가했지만 충분하지 않았습니다. "Web-Inf/Lib에 추가"라는 제안에 따라 라이브러리 폴더에서 웹 -INF (Eclipse 내에서)로 드래그하는 것이 직관적 인 것처럼 보였지만 작동하지 않았습니다. .jars를 Web-Inf에 복사하지도 않았습니다. 결국 Windows 데스크탑에서 Eclipse의 Web-Inf Lib 폴더로 드래그 앤 드롭을 드래그하여 문제를 해결했습니다. 빌드 경로에 추가 된 .jars가 Eclipse에 의해 웹 -inf lib에 자동 복사 된 경우 좋을 것입니다. 중요한 경우, 이것은 Windows 7의 Eclipse EE IDE, Indigo Release였습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top