내 수업을 위해 간단한 JSP / Servlet / Tomcat 웹 응용 프로그램을 만들고 있습니다. 교수님은 기본 동적 웹 프로젝트 구조와 약간 다른 폴더 구조를 사용하도록 요청했습니다. webcontent 폴더를 사용하는 대신 src / main / java 및 src / main / webapp 아래에있는 모든 소스 코드를 원합니다.
앱을 실행하면 환영 파일이 제대로 표시되지만 서블릿에 액세스하려고하면 다음과 같은 결과가 나타납니다.
Http 500 SEVERE: Allocate exception for servlet InitDb
java.lang.ClassNotFoundException. 빌드 경로 오류라고 확신합니다. 빌드 경로에 final / src가 있지만 경고가 표시됩니다.
"Cannot nest 'final/src/main/webapp/WEB-INF/classes' inside 'final/src'. To enable the nesting exclude 'main/' from 'final/src'
배포 어셈블리에 다음이 있습니다.
<wb-resource deploy-path="/" source-path="/src/main/webapp" tag="defaultRootSource"/>
main /을 제외하면 경고가 사라지지만 문제가 해결되지 않습니다. 조언을 주시면 감사하겠습니다. 감사.
답변
새로운 프로젝트를 만들 때도 같은 문제가있었습니다. Eclipse 내에서 Java 프로젝트를 만든 다음이를 mavenize 한 다음 Java 빌드 경로 속성을 제거 src/
하고 추가 src/main/java
하고 src/test/java
. Maven 업데이트를 실행하면 중첩 경로 오류가 발생했습니다.
그런 다음 마침내 깨달았습니다-이전에 그 항목을 보지 <sourceDirectory>src</sourceDirectory>
못했기 때문에-내가 그것을 mavenize 할 때 작성된 pom 파일에 한 줄이 있습니다. 제거한 후 해결되었습니다.
답변
나는이 스레드에 대한 비 정식적인 대답을 던지고 싶었습니다.
버전 제어 및 엄격한 디렉토리 구조 이유로 인해 제거 src/
및 추가 src/main/java
및 src/test/java
빌드 경로 와 유사한 작업을 수행하는 Acheron의 답변 (최상 답변)을 따를 수 없었습니다 .
저는 실제로이 중첩 된 빌드 경로 문제를 몇 주 동안 끈질 기게 해결했습니다. 문제에 대한 답은 오류 메시지에 암시되어 있습니다.
To enable the nesting exclude 'main/' from 'final/src'
고치다
빌드 경로에서를 Inclusion and Exclusion Patterns
클릭 Excluded: (None)
한 다음 다음 을 클릭하여 편집해야합니다 Edit...
.
- 네비게이터로 이동하여 프로젝트를 마우스 오른쪽 버튼으로 클릭하십시오.
- 빌드 경로
- 빌드 경로 구성
- 소스 (탭)
거기 main/webapp/WEB-INF/classes
에 Exclusion Pattern
. 그런 다음 main/webapp/WEB-INF/classes
별도의 소스 폴더로 빌드 경로 에 추가 할 수 있습니다 .
답변
이 시도:
라이브러리 탭에서 :
Eclipse -> right click on project name in sidebar -> configure build path -> Libraries
웹앱 라이브러리를 제거합니다.
click on "Web App Libraries" -> click "remove"
다시 추가 :
click "Add Library" -> click to highlight "Web App Libraries" -> click "next" -> confirm your desired project is the selected option -> click "Finish"
“Web App Libraries”강조 :
답변
나는 같은 문제가 있었고 위의 정답이 나를 위해 작동하지 않았습니다. 내가 그것을 해결하기 위해 한 것은 Build Path->Configure Build Path
소스 탭 으로 가서 모든 소스 (하나의 소스 만 가지고 있음)를 제거하고 거기에서 재구성하는 것이 었습니다. 결국 이클립스에서 프로젝트를 제거하고 오류를 해결하기 위해 maven 프로젝트를 다시 가져 왔습니다.
답변
내 경우에는 내가 Gradle을 자연 프로젝트에있는 일식 , 문제가 있었다 build.gradle
이 곳, sourceSets
지정 :
sourceSets {
main {
java {
srcDir 'src'
}
}
}
이 잘와 작품 것 인 IntelliJ 그러나,보다 같다 일식 하지 둥지처럼 수행 src
, src/java
, src/resources
. 이클립스 에서는 다음과 같이 변경해야합니다.
sourceSets {
main {
java {
srcDir 'src/main/java'
}
}
}
답변
다음은 간단한 해결책입니다.
- 프로젝트 >> 속성 >> 빌드 경로를 마우스 오른쪽 버튼으로 클릭하십시오.
- 소스 탭에서 모든 소스 폴더를 선택하십시오.
- 그들을 제거하십시오;
- 프로젝트 Maven >> Update the project를 마우스 오른쪽 버튼으로 클릭하십시오.
답변
빌드 출력이 이동하는 소스와 대상 디렉토리를 분리해야합니다. 또한 어떤 클래스 파일도 소스 디렉토리에서 끝날 수 없다는 점에 유의해야합니다. 이것은 교수님의 조언에 어긋나는 것이 아닙니다. 실제로 그는 ./src/main/java 및 ./src/main/webapp에 대한 maven 표준 소스 구조를 홍보하고 있습니다. 두 번째는 예를 들어 유지되어야합니다. 필수 WEB-INF / web.xml 파일이지만 실제 클래스는 절대 넣지 않습니다.
변경해야 할 것은 대상 디렉토리입니다. 동일한 표준을 사용하고 “./target”이라는 이름을 선택하는 것이 좋습니다. 빌드 된 모든 파일이 여기에 들어가고이를 패키징하면 올바른 배포 가능한 아티팩트가 생성됩니다. 나중에 maven을 사용하도록 마이그레이션하는 경우 스크립팅되고 반복 가능한 방식으로이를 수행하는데도 도움이됩니다.
문제가 해결되기를 바랍니다.