개발
IntelliJ java: package 패키지경로 does not exist 본문
인텔리제이로 이번에 IDE를 변경하면서 아파치제임스 소스 빌드하기 하려고ㅠ 10시간을 해딩,,,,
단순 인텔리 제이의 문제는 아니고, 컴파일,빌드 ,,등 기본적인 내용을 좀 자세히 알아야할거같다.
------------------------------------------------------------------------
JamesAppSpringMain.java에서 run실행
결과
2020-12-06 오전 12:08 - Build completed with 23 errors and 6 warnings in 34 sec, 881 ms
- java: package org.apache.james.dnsservice.api.mock does not exist
이런식으로 여러 test파일에서 오류 발생
원인:
- 요약 : 참조하고있는 class파일이없는것같다..
james-server-dnsservice-library
InetNetworkBuilderTest.java 파일의 임포트 패키지
import org.apache.james.dnsservice.api.mock.DNSFixture;
다음과 같이 mock객체는 dependency를 통해서 다른 모듈(james-server-dnsservice-api)을 참조하고있음.

그렇다면 이 참조된 class파일이 모듈 target 폴더에 존재해야하는데,테스트코드 컴파일 시점에 존재하지않는다.
www.jetbrains.com/help/idea/working-with-module-dependencies.html#dependency-scope
종속성이 모듈안에 등록돼있는데 왜 먼저 target을 생성하지 않았을까?
Modules can depend on SDKs, JAR files (libraries) or other modules within a project. When you compile or run your code, the list of module dependencies is used to form the classpath for the compiler or the JVM.
그냥 classpath를 jvm이 참조한다고만 홈페이지에 나와있긴한데,,정확하게는 모르겠다.
검증을 위해서 실제 정상작동하는 소스에서 target에 class파일을 가져와서, 참조하고있는 모듈 target 폴더에 직접 넣어줘서 다음 실행시 InetNetworkBuilderTest.java 가나오는지 안나오는지 확인결과 다음부터 에러 발생 안함.
- 해결책
mvn clean package -DskipTests -Dcheckstyle.skip 을이용해서 모든 모듈의 target을 생성해준다.
해결책 찾기까지 테스트
------------------------------------------------------------------------
테스트1
configuration option에서 do not build before run을 체크함 (run시에 build하지않음.)
결과
- Error: Could not find or load main class org.apache.james.app.spring.JamesAppSpringMain
원인: target에 class파일이 존재하지 않음. --> 컴파일이필요한가?
------------------------------------------------------------------------
테스트2
mvn compile 실행
결과
- 의존성 참조를 못해서 컴파일이안됨
'IntelliJ' 카테고리의 다른 글
| 스프링 웹 프로젝트 import 하기 (0) | 2020.12.06 |
|---|