[인텔리J] 인텔리제이에서 이클립스 프로젝트를 import 해보자(dependency type IntelliJ/Eclipse)(1)

2021. 4. 4. 17:07 IDE Tool/IntelliJ IDEA

우선 깃에서 이클립스 홈페이지를 임포트한다.

스프링 프레임 워크가 임포트 안되어 있기 때문에 아래와 같은 오류가 발생한다.

프레임 워크 추가를 클릭한다.

스프링 mvc를 선택한다.

문제를 해결한 후 다시 톰캣을 재구동한다.

이번엔 HttpServlet 매핑이 안되어 문제가 발생했다.

프로젝트 스트럭쳐 > 모듈 > 라이브러리로 이동한 후 톰캣을 추가해준다.

httpservlet부분이 정상 임포트된 것을 확인할 수 있다.

정상 구동되는 것을 확인할 수 있다.

우리가 지금까지 했던 것은 Dependencies storage format을 IntelliJ로 했었을 때 방법이다.

Eclipse 포맷은 조금 다르다.

invalidate caches 캐쉬(캐쉬 초기화)를 하고 리스타트를 한다.

다음과 같이 프로젝트 네비게이션 부분이 변경된 것을 확인할 수 있다.

아래 두번째 사진과 비교하면 확연히 알 수 있듯이 모듈이 사라지고 아래와 같이 표시가 된다.

dependencies type Eclipse

dependencies type IntelliJ

그럼 프로젝트 파일은 어떠헤 보는지 확인해보도록하자

우측 상단데 프로젝트 파일을 클릭한다.

그럼 아래와 같은 목록이 나온다.

톰캣을 구동하면

다음과 같은 오류가 발생한다.

1번 디펜던시스 타입이 이클립스이고 2번 사진은 인텔리제이 타입이다.

보시다시피 프로젝트를 우클릭하면 애드 프레임워크가 보이질않는다.

아래는 dependencise type itnellij인 모듈인데 아래와 같이 프레임 워크 화면이 정상 출력되는 것을 확인할 수 있다.

하여 프로젝트 스트럭쳐로 접속 > 모듈을 클릭 > 스프링을 선택하면

아래와 같은 안내 문구가 나온다 스프링 라이브러리를 찾을 수 없다는 메시지이다.

픽스를 클릭하자.

그럼 아래와 같은 팝업이 나온다.

스프링 프레임워크가 추가된 것을 확인할 수 있다.

실행을 하면 다음과 같은 오류가 나온다.

springframework 중 Daosupport라고 있다.

해당 클래스 파일은 

아래 파일을 임포트해줘야 이용할 수 있다.

인텔리제이는 상관없으나 이클립스는 이렇게 해줘야 한다.

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-tx</artifactId>
			<version>4.3.10.RELEASE</version>
		</dependency>

그런데 필자는 다른 문제를 방지하고자 다른 프레임워크도 추가로 임포트해줬다.

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>4.3.10.RELEASE</version>
		</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-tx</artifactId>
			<version>4.3.10.RELEASE</version>
		</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>4.3.10.RELEASE</version>
		</dependency>

여기서 문제가 하나 있는데, 아래와 같이 임포트 메이븐 프로젝트가 나온다.

내용은 home2 모듈이 remove되었다는 내용이다.

네비게이션에서 프로젝트로 들어가면 home2 모듈이 그대로 있는데, 무엇을 삭제했는지 정확히 모르겠다.

프로젝트 구동하는데에는 아무런 문제가 없긴하다.

그럼 이번엔 새로 프로젝트를 만들어서 no를 한번 클릭해보자

yes와 no의 차이를 보면 삭제된 것은 homepage5.userlibraries 파일이 삭제되어 발생된 문제라는 것을 알 수 있다.

이제 다음은 서블릿 문제를 해결하기 위하여 톰캣 라이브러리 추가를 해보도록하자.

프로젝트 스트럭쳐로 이동한 후 모듈 > 라이브러리로 이동한 후 톰캣을 추가하도록하자.

추가가 되면 다음과 같이 매핑 문제가 해결된 것을 확인할 수 있다.

톰캣을 구동하면 정상 실행이 된다.

근데 다음과 같이 게시판을 클릭하면

다음과 같이 내부 서버 오류가 발생한다.

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'titleConfigurer': Failed to introspect bean class [org.springframework.web.servlet.view.tiles3.TilesConfigurer] for lookup method metadata: could not find class that it depends on; nested exception is java.lang.NoClassDefFoundError: org/apache/tiles/request/ApplicationContext

 

이유는 다음과 같이 dispatcher-servlet.xml 파일의 다음 추가 때문에 그렇다.

만들다 말았기 때문에 일단 프로젝트 정상 구동을 위해 해당 내용을 삭제하도록하자

다시 톰캣을 구동하도록하자

그리고 다시 게시판을 클릭하니 다음과 같은 오류가 또 발생했다.

분명 수정했는데, 동일한 문제가 발생한 것이다.

위와 같이 수정해도 동일한 문제가 발생한다면 out 폴더를 확인해야한다.

다음과 같이 수정한 내용이 반영이 안된 것을 알 수 있다.

이클립스 프로젝트를 import하면 이런 문제가 발생한다.

이 경우 다음과 같이 수동으로 진행하여 문제를 해결하도록하자

다음과 같이 수정한 파일을 복사한다.

그리고 다음과 같이 붙여넣기를 한다.

붙여넣기를 한다.

덮어씌울지 묻는 내용이 나온다.

덮어씌우기를 진행하자

다음과 같이 수정된 것을 확인할 수 있다.

다시 톰캣을 재구동하고 게시판을 다시 접속해보자

잘 접속되는 것을 확인할 수 있다.

추가로 다음과 같이 이상한 부분이 있지만 넘어가도 되는 부분을 짚어보고자한다.

web.xml을 보면 다음과 같이 파일이 없다고 나온다.

그러나 우리가 알고 있듯이 파일은 이미 존재하는 것을 알 수 있다.

이것 역시 이클립스 프로젝트를 인텔리에지로 import시 발생하는 문제로 볼 수 있다.

참고해야 할 것은 다음과 같은 문제가 있어도 프로젝트는 위와 같이 정상 구동이 되니 무시하고 작업을 진행하면된다.

추가로 필자의 경우 다음의 레이아웃을 tiles로 처리하려고 작업하고 있었다.

그런데 import 프로젝트의 경우 다음과 같이 include를 삭제하고 컴파일을 해도

다음과 같이 out directory에는 반영이 안된다.

그리고 실행 결과 역시 변화가 없는 것을 확인할 수 있다.

이로인해 output path를 변경해야하는데, 변경 방법은 다음과 같다.

변경 후에 톰캣 실행시

다음과 같이 달라진 아웃풋 결과를 확인할 수 있다.

참고로 다음과 같이 out directory의 경우 위와 같이 output 경로를 변경했다면

삭제해도 상관없다.

다만 삭제할 경우 이전의 out 폴더(realhome:war exploded)는 볼 수 없으므로 이 점을 참고해야한다.

다음과 같이 삭제가 되었어도 output directory는 변경되었기 때문에

문제없이 이용이 가능하다.

앞서 설명했던 것처럼 처음의 realhome:war exploded의 경우 war파일을 import하면서 생성되는 파일이다.

그렇기 때문에 out 폴더를 삭제하면 해당 폴더(원본 프로젝트) 파일도 삭제된다.

우리는 어차피 원본 프로젝트는 불러왔고 원본 프로젝트에 새로 추가된 추가 프로젝트로 작업을 진행하기 때문에 삭제해도 문제없다.

추가로 다음과 같은 작업을 진행하면

아래와 같이 추가 아티팩트가 생성되는 것을 확인할 수 있다.

다음과 같이 빌드를 진행하면

다음과 같이 out 폴더도 생성되고 war 파일도 생성된 것을 확인할 수 있다.

또한 추가로 out directory도 새로 생성된 것을 확인할 수 있다.

마지막으로 정리하자면 다음과 같다.

1. 처음 out 디렉토리는 원본 디렉토리이다.

2. output 디렉토리를 변경하면 변경한 디렉토리를 기준으로 출력된다.

3. out 디렉토리를 삭제해도 상관없다.

4. 새로 아티팩트를 만든 후 빌드하면 새로 아웃 폴더가 생성된다.

참고로 out 폴더가 없을 경우 컴파일러 output을 다음과 같이 설정했다면 인텔리제이는 다음과 같이 production이라는 기본 디렉토리를 생성한다.

해당 compiler ouput이 어떻게 생성되는지는 모르겠으나 중요한 점은 main 패키지에 있는 클래스와 리소스에 있는 파일들을 톰캣 실행시 빌드해준다는 것을 알 수 있다.

또한 추가로 우리가 해당 out 디렉토리에서 applicationContext.xml이나 dispatcher-servlet.xml 파일이 compiler output directory에서는 볼 수 없으나 정상 빌드가 되는 것을 알 수 있으니 참고하여 이용하길바란다.

 

출처 : namubada.net/214?category=776665