[java] Eclipse 빌드 경로 중첩 오류

내 수업을 위해 간단한 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/javasrc/test/java빌드 경로 와 유사한 작업을 수행하는 Acheron의 답변 (최상 답변)을 따를 수 없었습니다 .

저는 실제로이 중첩 된 빌드 경로 문제를 몇 주 동안 끈질 기게 해결했습니다. 문제에 대한 답은 오류 메시지에 암시되어 있습니다.

To enable the nesting exclude 'main/' from 'final/src'

고치다

빌드 경로에서를 Inclusion and Exclusion Patterns클릭 Excluded: (None)한 다음 다음 을 클릭하여 편집해야합니다 Edit....

  1. 네비게이터로 이동하여 프로젝트를 마우스 오른쪽 버튼으로 클릭하십시오.
  2. 빌드 경로
  3. 빌드 경로 구성
  4. 소스 (탭)

제외 패턴

거기 main/webapp/WEB-INF/classesExclusion 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'
        }
    }
}


답변

다음은 간단한 해결책입니다.

  1. 프로젝트 >> 속성 >> 빌드 경로를 마우스 오른쪽 버튼으로 클릭하십시오.
  2. 소스 탭에서 모든 소스 폴더를 선택하십시오.
  3. 그들을 제거하십시오;
  4. 프로젝트 Maven >> Update the project를 마우스 오른쪽 버튼으로 클릭하십시오.

답변

빌드 출력이 이동하는 소스와 대상 디렉토리를 분리해야합니다. 또한 어떤 클래스 파일도 소스 디렉토리에서 끝날 수 없다는 점에 유의해야합니다. 이것은 교수님의 조언에 어긋나는 것이 아닙니다. 실제로 그는 ./src/main/java 및 ./src/main/webapp에 대한 maven 표준 소스 구조를 홍보하고 있습니다. 두 번째는 예를 들어 유지되어야합니다. 필수 WEB-INF / web.xml 파일이지만 실제 클래스는 절대 넣지 않습니다.

변경해야 할 것은 대상 디렉토리입니다. 동일한 표준을 사용하고 “./target”이라는 이름을 선택하는 것이 좋습니다. 빌드 된 모든 파일이 여기에 들어가고이를 패키징하면 올바른 배포 가능한 아티팩트가 생성됩니다. 나중에 maven을 사용하도록 마이그레이션하는 경우 스크립팅되고 반복 가능한 방식으로이를 수행하는데도 도움이됩니다.

문제가 해결되기를 바랍니다.