인텔리제이는 소스코드를 컴파일한 후에 프로젝트의 빌드선언에 따라서 의존성을 클래스패스 classpath 로 추가하여 실행시킨다. 그래서 스프링부트와 관련해서 build.gradle에서 providedRuntime('org.springframework.boot:spring-boot-starter-tomcat') 가 선언되어 있으면 스프링부트 앱을 실행시킬 때 클래스패스 상에서 내장 컨테이너를 제외한다. 그래서 실제로 인텔리제이상에서 providedRuntime 을 선언해두면

/Library/Java/JavaVirtualMachines/jdk1.8.0_91.jdk/Contents/Home/bin/java -Dspring.output.ansi.enabled=always -Didea.launcher.port=7540 "-Didea.launcher.bin.path=/Applications/IntelliJ IDEA.app/Contents/bin" -Dfile.encoding=UTF-8 -classpath "... 의존성 라이브러리들 선언...(providedRuntime 선언과 관련된 것은 제외 )" com.intellij.rt.execution.application.AppMain {내 앱}

으로 실행되면서 실행안된다.

이클립스는 소스코드만 컴파일하고 실행에 필요한 클래스패스는 빌드경로buildpath 기준으로 잡기 때문에 무리없이 실행된다.

이 두 IDE 의 차이를 이제야 이해했다. @_@)>


문제

그레이들gradle 으로 구성한 멀티프로젝트를 이클립스에서 불러오게 되면 Classpath Dependency Validator 가 검증되지 않은 클래스패스 상에 의존성을 가진 프로젝트가 있다는 메시지를 던진다.

꽤 거슬린다. ㅡ_-);;

이에 대해서 인터넷 검색을 해봤다.

여기서 해답을 보면 프로젝트를 선택하고 gradle cleanEclipse eclipse 를 해서 이클립스가 그레이들 네이처를 잊어 먹도록 한 후에 수동으로 처리하도록 하는 수를 쓰고 있다.



해결책

해결방법은 간단하다.

[Preference] - 'Validation' - 'Classpath Dependency Validator' 비활성화



하면 끝난다.

경고를 무시해도, 그레이들에 의해서 프로젝트 의존성이 처리가 되기 때문에 큰 문제는 없다.

Eclipse 3.6.x 버전이 되면서 노트북에서 실행되는 이클립스가 얼어버리는 되는 상황들이 빈번하게 발생하기 시작했다. 코딩을 하다가 탭을 바꾸거나 자동완성 기능을 사용하려고 하면 화면이 멈추는 증상에 너무 짜증이 나서 어떻게 할까 고민하던 차다.

지금 노트북에는 외장그래픽으로 ATI Radeon 이 포함되어 있다.

우분투랑 ATI 라데온 조합이 안좋은 건 이 노트북을 사용하면서 실감했다. 우분투와 궁합이 괜찮은 건 엔비디아nVidia 와 인텔intel 이다.

이클립스를 실행할 때마다 너무 짜증이나서 운영체제를 다시 설치할까 했는데, 문득 이에 대한 인터넷 검색을 해보자 하는 생각이 들었다(이렇게 쓴지 한달이 좀 넘은 것 같은데...).

인터넷 검색으로는 ubuntu 14.04 eclipse slow 으로 검색을 시작했다. 그랬더니 나오는 첫번째 결과가 똬악!

을 통해서 간단하게 방법을 찾았다. 해결책은 크게 두 가지 방법이 있다.

  • eclipse.sh 실행 스크립트 작성

    export SWT_GTK3=0
    export UBUNTU_MENUPROXY=0
    ./eclipse
  • eclipse.desktop 애플리케이션 등록정보 수정

    [Desktop Entry]
    Version=4.4
    Name=Eclipse
    Comment=Eclipse IDE
    Exec=env UBUNTU_MENUPROXY=0 SWT_GTK3=0 =/home/honeymon/development/eclipse/eclipse
    Icon=/home/honeymon/development/eclipse/icon.xpm
    Terminal=false
    Type=Application
    Categories=Utility;Application

위의 두 가지 방법 중에 후자의 것을 사용했다.


문제가 생긴 이유는, GTK3 의 SWT 가 최적화되어 있지 않기 때문에 나타나는 버그로 보인다.

이클립스에서 참조한 라이브러리의 소스코드가 보이지 않는 경우가 있다.

그럴 때는, 프로젝트Project의 속성Properties를 열어서 'Java Build Path' 탭 중 [Order and Export] 에서 'Web App Libraryes' 항목을 제일 밑으로 내리면 된다. 'Web App Libraries'를 선택하고 오른쪽에 활성화된 [Bottom] 버튼을 누르면 된다.


예전에는 IDE(개발툴)의 그레들Gradle에 대한 지원이 불안정해서 터미널창에서

./gradlew eclipse  // 이클립스

of

./gradlew idea // 인텔리제이

등의 명령어를 실행한 후에, IDE에서 프로젝트를 import하여 사용했었다. 그렇지만 gradle1.8인가 부터 개발툴들에 대한 API가 정리가 되고 IDE의 그레들 플러그인이 안정화되면서 위의 작업들은 불필요해졌다. 굳이 터미널창에서 초기화 작업을 진행하지 않아도 그레들 플러그인을 통해서 build.gradle, settings.gradle을 분석하여 필요한 작업을 진행해준다.


이클립스에서 그레들 프로젝트를 불러오는 방법은 간단하다. 우선 그레들 플러그인이 설치되어 있어야 한다.

[File - Import]를 선택하면 다음 창이 뜬다. 여기서 'Gradle Project'를 선택하고 [Next]를 선택한다.

다음 'Import Gradle Project' 창에서 [Browse...] 버튼을 눌러 불러올 그레들 프로젝트를 선택한다. 프로젝트를 불러오고 나면 아래 그림에서 보는 것처럼 'Import 하기 전에 [Build Model] 버튼을 눌러야 한다.' 라는 경고가 뜬다. 그대로 진행해주자. 

그러면 아래의 그림처럼 진행률이 나타난다. 짐작으로는 build.gradle과 settings.gradle을 분석하는 과정이라 생각된다.

분석이 끝나고 나면, 다음 그림과 같이 프로젝트 항목이 나타나고, 이 프로젝트를 체크하고 [Finish] 버튼을 누르면 그레들 프로젝트 불러오는 과정은 완료된다.

그레들 프로젝트를 불러오면서 'build.gradle'에 따라서 다시한번 프로젝트 초기화과정이 진행된다. 

위의 태스크들이 실행된 이유는,  아래 그림에서 보는 것처럼 build.gradle 내에

apply plugin: 'eclipse-wtp' 

라고 그레들에서 eclipse-wtp 플러그인을 사용한다고 정의되어 있기 때문에, 프로젝트를 불러오는 과정에서, 이클립스에서 자동으로 실행가능한 태스크들을 실행한 것이다.


+ Recent posts