출처 : http://stackoverflow.com/questions/10564684/how-to-fix-error-updating-maven-project-unsupported-iclasspathentry-kind-4

I have imported maven project in STS, when I run update update project I receive:

"Updating Maven Project". Unsupported IClasspathEntry kind=4

Is there a workaround for this?


처리방법

Have you tried:

  1. If you have import project into the eclipse 4, please delete it.
  2. In maven consol, run: mvn eclipse:clean
  3. In Eclipse 4: File -> Import -> Maven -> Existing Maven Projects

이클립스에서 사용하는 m2e plugin의 문제인 듯 한데...

일반적으로 project를 workspace 에서  임포트(import)하여 프로젝트 등록시에 m2e 가 뭔가 문제를 발생하는 것으로 보인다. @_@)> 정확한 이유는 나로서는 알 수가 없... Orz... 사용할 수 있게 임하는 것이 좋지. ㅎㅎ

참고사이트 : http://www.zparacha.com/remove-eclipse-workspace-dropdown-list/#.T7sxfHl1BRU

이클립스에서 Switch workspace를 자주 사용하다보면 현재 사용하지 않는 목록까지도 그대로 유지가 되면서 길어지는 경향이 있다. 이런 경우에 이클립스를 재설치를 하는 경우가 종종 있는데, 그러지 말고, 설정파일을 수정하여 가볍게 변경하도록 하자.


switch workspace 가 저장되어 있는 파일 위치

- 이클립스 설치위치//configuration/.settings/org.eclipse.ui.ide.prefs

이 파일 안에 변경했던 workspace 목록이 저장되어 있다.

MAX_RECENT_WORKSPACES=5

RECENT_WORKSPACES=/Users/ihoneymon/Documents/githubWorkspace/ipams\n/Users/ihoneymon/Documents/workspaces/dipams\n/Users/ihoneymon/Documents/workspaces/dreaminfra

RECENT_WORKSPACES_PROTOCOL=3

SHOW_WORKSPACE_SELECTION_DIALOG=false

eclipse.preferences.version=1

RECENT_WORKSPACES 에 길게 나열된 문자열 중에서 불필요한 부분을 제거하면 된다. \n 단위로 삭제하면 된다.

로컬환경에서 개발을 하다보면, URL에 프로젝트명이 들어가는 것이 번잡스럽고 귀찮은 때가 참 많다. Link를 통해서 연결을 할 떄에도 이에 대한 고려를 해야하는 것이 번거롭기 그지없다.

이클립스 모듈설정을 수정하여 로컬URL에서 프로젝트명을 제거해보자.



  이클립스에서 실행하는 서버를 더블클릭하면 아래 그림과 같이 서버의 정보를 확인할 수 있는 탭이 열린다.

  그 열린 탭의 하단을 보면 [Modules] 라는 탭이 보일 것이다.

  그 탭을 클릭하자.

  그리고는 'Web Modules' 에서 로컬 실행경로(Path : 화면에서는 /honeymon.mvc)를 선택하고, 오른쪽에 있는 버튼들 중 [Edit]를 클릭한다.


[Edit]를 클릭하면 아래의 내용을 가진 팝업창이 뜬다.

'Path'를

'/honeymon.mvc'

에서

'/'

으로 변경한다. 그리고는 [OK] 버튼을 눌러주자.

그런 다음, [Server]탭에서 서버를 선택한 후 [Clean] 과 [Publish]를 차례로 클릭해준다.

그 후에 서버를 재시작하고 URL을

http://localhost:8080/

으로 입력하면 아래와 같이 내용이 나타나는 것을 확인해볼 수 있다.

아래처럼 나타나면 정상적으로 적용된 것이다.

@_@) 이클립스의 workspace를 바꿔주네, 이클립스에서 사용하는 서버의 설정파일을 수정하네

라는 글들이 있었지만, 위의 방법이 제일 빠르고 손쉬웠다.

나는 그랬다.



11. 6. 26 오후 4시 02분 09초: Refreshing [/SpringMVCtest/pom.xml]
11. 6. 26 오후 4시 02분 25초: Maven Builder: FULL_BUILD 
11. 6. 26 오후 4시 02분 26초: [WARN] 
11. 6. 26 오후 4시 02분 26초: [WARN] Some problems were encountered while building the effective model for com.honeymon:spring:war:1.0.0-BUILD-SNAPSHOT
11. 6. 26 오후 4시 02분 26초: [WARN] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-compiler-plugin is missing. @ line 148, column 12
11. 6. 26 오후 4시 02분 26초: [WARN] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-surefire-plugin is missing. @ line 208, column 12
11. 6. 26 오후 4시 02분 26초: [WARN] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-war-plugin is missing. @ line 156, column 12
11. 6. 26 오후 4시 02분 26초: [WARN] 
11. 6. 26 오후 4시 02분 26초: [WARN] It is highly recommended to fix these problems because they threaten the stability of your build.
11. 6. 26 오후 4시 02분 26초: [WARN] 
11. 6. 26 오후 4시 02분 26초: [WARN] For this reason, future Maven versions might no longer support building such malformed projects.
11. 6. 26 오후 4시 02분 26초: [WARN] 
11. 6. 26 오후 4시 02분 55초: Maven Builder: AUTO_BUILD 
지금 넷북에 깔려있는 STS는 2.6.2 버전이다. Spring template project 를 생성후에 위와 같은 메시지가 나타난다.
maven과 관련된 플러그인 버전 정보가 빠져있다는 것이다.
그래서 프로젝트에 있는 pom.xml 을 열어보았다. <version></version>이 없다. 
그래서 http://mvnrepository.com/ 여기에서 해당하는 플러그인들의 버전을 확인하고 넣어줬다.
 
is(6) 메소드에서 오류가 나는 이유를 몰랐다!

package springbook.learningtest.jdk;

import org.junit.Test;
import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.*;


public class ReflectionTest {
	@Test
	public void invokeMethod() throws Exception {
		String name = "Spring";
		
		//length()
		assertThat(name.length(), is(6));
		
	}
}


이클립스 환경을 보면, 
에서 보는 것처럼 hamcrest 가 추가되어 있는데 말이다. ㅡ_-);; 저걸로 부족했던건가?

그래서 인터넷을 뒤지다보니 
두 개의 글을 보고서 무언가가 빠졌다는 것을 느꼈다. 그래서 급히 인터넷을 검색
구글 검색 : hamcrest library eclipse
hamcrest 위키를 발견했다. 
그곳에서 hamcrest-all-1.2.jar  받아서 java lib/ext에 추가했다.
그리고 이클립스를 재가동 한 후에
import static org.hamcrest.CoreMatchers.*;
을 추가하고 나니 별 이상없이 정상적으로 수행된다.

Junit(4.8) 에 기본포함되어 있는 hamcrest core 에 존재하는 Matcher 클래스와는 다른 별도의 패키지에 is(int) 형 메소드가 존재하는 것으로 보인다!? 맞나?
이건 어디까지나 나의 섯부른 추측일 뿐이다. ㅡ_-);

+ Recent posts