2009-08-21 5 views
15

나는 각 원본 폴더가 그것과 관련된 출력 폴더를 가지고있는 이클립스 프로젝트를 가지고있다./classes 대신/eclipse-classes라고 부릅니다. I 폴더가있는 경우junit 테스트에 사용되는 Eclipse 클래스 경로를 어떻게 구성합니까?

그래서 : SRC/메인/자바 (일반 받는다는 것을) 대상 폴더는 다음과 같습니다이 보이는 등 자원

에 대한 마찬가지로 대상/일식 - 클래스

그리고 (예 : eclipse가 이러한 폴더에 들어있는 .class 파일을 생성하지만) 모든 Junit 테스트를 실행하면 "클래스를 찾을 수 없음"이라는 예외가 발생합니다. JUnit을 내장 Eclipse 테스트 러너 (즉, 클래스를 마우스 오른쪽 버튼으로 클릭하고 "Run As", "Junit test")를 사용하여 실행하고 있습니다.

/classes에/eclipse-classes 폴더를 복사하면 성공합니다. 즉, Eclipse가/classes를 사용하고 있음을 의미하지만 변경하려면 구성 옵션을 찾을 수 없습니다. eclipse가/classes 폴더를 사용하는 이유와 이유를 알아낼 방법이 있습니까?

리치 판매자의 대답에 의해 영감을 몇 가지 추가 정보를 (아마도 관련, 나는 또한 사용하고있어 m2eclipse에 플러그인) :

process-resources resources:testResources 

동안 : 메이븐 자원 변화에서 다음을 실행하도록 구성되어 있습니다 이것은 유용한 정보 (잘못된 디렉토리로 복사)를하지 않을 것입니다. 자원은 올바른 위치에 있기 때문에 문제가되지 않습니다.

.classpath 항목이 괜찮아 보입니다. 이 중첩 리치 게시하는 것보다 조금 더 깊이 간다 있도록 받는다는 하위 프로젝트의 무리지만, 그렇지 않은 경우는이 라인을 제외하고 정확히 동일합니다 :

<classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/> 

나는 우리가 하나 있지만 기압 아무것도 상처 아니라고 필요가 있다고 생각 .

edit2 : 추가 테스트를 통해 eclipse가/eclipse-classes 폴더와/classes 폴더에서 클래스 파일을 생성하고 있음을 알 수 있습니다. m2eclipse는 백그라운드에서 자동으로 빌드 할 때 mvn 빌드를 실행하는 것으로 보이지만이를 비활성화하는 방법을 찾지 못하는 것 같습니다. 아무도 다른 아이디어가 없다면 m2eclipse 개발자들과 연락을 취할 것입니다.

+0

원본 폴더 "서버"와 "클라이언트"에 대해 "서버 클래스"와 "클라이언트 클래스"가 출력 폴더로 존재한다는 것을 의미합니까? –

+0

JUnit은 어떻게 시작합니까? JUnit Eclipse 플러그인을 사용하거나 Maven에서 단위 테스트를 시작합니까? – Dirk

+0

질문 텍스트에 답변을 추가했습니다. – wds

답변

7

m2eclipse를 사용하면 Eclipse 프로젝트의 구성을 플러그인이 덮어 씁니다. 해결 방법은 this article을 참조하십시오.

그 이유는 일부 받는다는 플러그인이 target/의 외부에있는 디렉토리에 대처할 수 없기 때문에 m2eclipse에 개발자들에 상관없이 이클립스에서 구성 할 것을 target/classestarget/test-classes, 없을 컴파일 클래스 폴더를 강제하는 것입니다.

프로필을 사용하면 Eclipse에 대해 다른 폴더를 사용할 수 있습니다. 그러나 maven (및 해당 플러그인)의 출력 폴더를 변경하는 것은 현명하지 않습니다.

+0

나는 그렇게 생각하지 않는다. 일식 컴파일러는 별도로 정의 된 폴더에 클래스를 출력하고있다. 그래서 일식 컴파일러 내 출력 폴더에 데리러, 그것은 깨진 런타임 클래스 경로입니다. 필자는 maven이 .class 파일을 생성하는 것을 원하지 않습니다. 왜냐하면 증분 컴파일을 망칠 가능성이 있기 때문입니다. – wds

+0

또한 이클립스가 타겟/클래스를 사용할 수 있도록 이클립스가 사용될 때 .class 파일을 어딘가에 배치하도록 maven을 구성 할 때 언급 된 해결책이있는 것으로 보인다. 내가 생각하기에 반대편에서 접근하고있다 : 이븐이 메이븐의 길에서 빠져 나오도록 구성한다. 이것은 junit plugin이 빌드 경로를 사용하여 런타임 클래스 경로를 만드는 경우에만 나 (프로젝트 .pom을 오염시키지 않음)보다 논리적 인 접근 방식처럼 보입니다. – wds

+0

이 문제는 maven-eclipse-plugin에서 m2eclipse로 이동 한 후 내 클래스 경로 문제가 해결되었습니다. 게시 해 주셔서 감사합니다. – JamesC

4

Eclipse JUnit 통합에는 특수한 클래스 경로 구성이 없으므로 클래스 경로에 정의 된 출력 폴더에서 작동하며 해당 클래스로 컴파일 된 모든 클래스를 찾아야합니다. .classpath 파일에 뭔가 이상한 점이있을 수 있으므로 JUnit은 혼란 스러울 수 있습니다 (기본적으로 .classpath 파일은 프로젝트의 루트에 있습니다.).

귀하의 설명에 따라 다음과 같은 항목을 볼 수 있습니다 (기본 출력 폴더와 src/main/java 및 src/main/resources에 대한 재정의 참고). 그래서이 문제

<classpathentry excluding="**" kind="src" output="target/eclipse-classes" path="src/main/resources"/> 
<classpathentry kind="src" output="target/eclipse-classes" path="src/main/java"/> 
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> 
<classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/> 
<classpathentry kind="output" path="target/classes"/> 

이 긴 샷,하지만 그것도 그 사건 인 경우 메이븐 깨끗한, 프로젝트에 구성되어 있는지 일 수있다 경우 클래스 경로는 현저하게 다른 보입니까 클린 목표가 실행될 때마다 target/eclipse-classes의 내용이 삭제되므로 테스트가 실행되기 전에 파일 시스템에서 테스트가 삭제됩니다. 프로젝트 속성 (alt-enter)을 열고 Maven 항목을 선택하여 Maven이 실행하는 목표를 볼 수 있습니다.


이 부분은 귀하의 질문에 직접적으로 대답하지 않지만 어쨌든 유용 할 것입니다. 필자는 이클립스 출력 디렉토리를 Maven과 동일하게 만들고 이클립스 내부에 문제가없는 경향이있다. (컴파일을 시도하지 않도록 프로세스 리소스 만 실행하도록 Maven 빌더를 수정한다.)

Maven 빌드를 수행하면 Maven 컴파일러는 변경된 클래스를 생성합니다 (클린이 포함 된 경우 모두 해당됩니다). 이클립스의 후속 수정은 증분 컴파일러에 의해 감지되고 처리된다. 모두 괜찮다. 자동으로 빌드를 끄지 만, 그것은 저를 귀찮게하기 때문에 Maven과 Eclipse fght 일 수 있습니다.

+0

maven이 프로세스 리소스 만 실행한다고 확신합니다. 나는 월요일에 나머지를 시험해보고 당신에게 돌아갈거야. – wds

+0

더 많은 정보를 추가했는데 설명 할 수있는 내용이 보이지 않습니다 ... – wds

+0

결국 출력물을 포기하고 동일한 출력 폴더를 사용하기 위해 maven과 eclipse를 구성했습니다. 그것은 아주 가끔 깨지 긴하지만 좋은 것 같아요. – wds

1

다른 플러그인을 열어 보려는 경우, Eclipse 프로젝트 설정을 생성하기 위해 maven-eclipse-plugin을 사용한다. 필자는 Eclipse 프로젝트가 클래스에 대해 완전히 다른 출력 디렉토리를 사용하도록 구성하도록 플러그인을 구성합니다 (아래 참조). 이것은 프로젝트 루트와 관련이있어서 대상 외부에 위치합니다.

<plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-eclipse-plugin</artifactId> 
     <version>2.6</version> 
     <configuration> 
      <outputDirectory>eclipse_build</outputDirectory> 
     </configuration> 
    </plugin> 

이것은 Maven과 Eclipse를 통해 테스트를 바로 실행할 수 있다는 것을 포함하여 저에게 잘 맞습니다.

0

mvn eclipse:eclipse을 실행 해보십시오. 이 문제가 해결되었습니다

관련 문제