'Eclipse'에 해당되는 글 82

  1. 2013.03.29 전자정부 표준프레임워크 개발환경에서 servlet-api가 배포되어 에러가 나는 경우
  2. 2013.02.09 STS 설치 - Grails 플러그인 추가
  3. 2012.05.22 이클립스에서 실행되지 않는 웹 어플리케이션
  4. 2012.01.11 Access restriction
  5. 2012.01.10 [SVN] Path is not a working copy directory
  6. 2011.11.14 이클립스에서 표준 출력을 파일로 저장하기
  7. 2011.10.05 [SVN] RA layer file already exists
  8. 2011.09.07 cannot be resolved ...
  9. 2011.08.15 NetBeans에서 SVN 저장소 Checkout하기 (Eclipse와 소스 공유)
  10. 2011.08.07 Eclipse Refactor - Convert Local Variable to Field
  11. 2011.08.07 Eclipse Refactor - Inline
  12. 2011.08.07 Eclipse Refactor - Move
  13. 2011.08.03 svn:ignore에서 제외하기
  14. 2011.08.01 WindowBuilder
  15. 2011.08.01 Equinox p2 를 이용한 Eclipse 설치
  16. 2011.04.26 Eclipse에서 jar 실행시키기
  17. 2011.04.05 Eclipse 에서 라이브러리 삭제후 import 가 되지 않을 때
  18. 2011.04.03 SVN Commit 에러 - 시간이 오래되었습니다.
  19. 2011.03.18 TCP/IP Monitor
  20. 2011.03.14 Eclipse 에서 static import 를 쉽게 사용하기
  21. 2011.01.01 [IBM dWs] Java SE 6, Ecipse, Ant 를 이용한 간단한 웹 서비스
  22. 2010.10.07 황당한 실수
  23. 2010.09.08 Eclipse 프로젝트에 에러 표시가 없어지지 않는 경우 해결방법
  24. 2010.09.05 이클립스 신기한 기능
  25. 2010.08.25 이클립스 버그 경고 기능
  26. 2010.08.25 Subversion에서 Tag를 잘못 단 경우
  27. 2010.08.25 이클립스에 설치된 플러그인 확인하기
  28. 2010.08.17 FindBugs
  29. 2010.08.16 Eclipse에서 Ant로 HSQLDB 사용하기
  30. 2010.08.01 Eclipse 바꾸기

전자정부 표준프레임워크 개발환경에서 servlet-api가 배포되어 에러가 나는 경우

- 아래와 같은 에러가 난다.
심각: Exception starting filter springSecurityFilterChain
org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'springSecurityFilterChain' is defined

심각: Error configuring application listener of class org.springframework.security.ui.session.HttpSessionEventPublisher
java.lang.ClassNotFoundException: org.springframework.security.ui.session.HttpSessionEventPublisher

심각: Exception Processing ErrorPage[exceptionType=java.lang.Throwable, location=/common/error.jsp]
org.apache.jasper.JasperException: /common/error.jsp(2,62) Unable to read TLD "META-INF/c.tld" from JAR file "file:/C:/egovfrm/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/testprj/WEB-INF/lib/jstl-1.2.jar": org.apache.jasper.JasperException: Failed to load or instantiate TagLibraryValidator class: org.apache.taglibs.standard.tlv.JstlCoreTLV

- 개발자들이 servlet-api-2.5.jar, jsp-api-2.0.jar가 배포되어서 나는 에러라고 한다.
전자정부 표준프레임워크 개발환경 2.5에서는 발생하지 않고, 2.0에서만 발생.
Server를 Clean하고, servlet-api-2.5.jar, jsp-api-2.0.jar[각주:1]를 제거하면 정상적으로 동작한다고 함.
매번 이래야 된다고.

- 먼저 Dependcy 설정을 의심.
provided로 되어 있음.

- 관련 글을 참고해서 해결
프로젝트의 Deployment Assembly에서 Maven Dependencies를 제거하고 war:inplace Goal(Run As - Maven build ...)을 실행시키면 된다.
(그래도 남아 있으면 Maven clean을 하던지[각주:2], WEB-INF/lib/*.jar를 모두 지우자)
Maven Dependencies에는 해당 라이브러리가 있지만 WEB-INF/lib/에는 없다.


  1. C:\egovfrm\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\testprj\WEB-INF\lib\ [본문으로]
  2. maven clean 플러그인에서 WEB-INF/classes/와 WEB-INF/lib/를 지우도록 설정되어 있다면 [본문으로]

STS 설치 - Grails 플러그인 추가

- STS 다운로드
zip 파일로 된 배포본을 다운로드받고 압축을 푼다.

- Grails 플러그인 추가


- Grails requires a JDK
Grails 프로젝트 생성시 JDK를 필요로 하면 Installed JREs에서 설정한다. 

이클립스에서 실행되지 않는 웹 어플리케이션

- Tomcat 5.5 인데 어플리케이션이 제대로 실행이 되지 않는다.
로그가 자세하게 않나온다. ==> [todo] 이거 설정 바꾸면 자세하게 나오지 않나?

심각: Error listenerStart

- web.xml의 순서가 잘못된 것으로 파악.

- 검색해보니 Log4jConfigListener를 ContextLoaderListener보다 먼저 하라고 하는데 나는 해당 안됨.
동일한 소스가 개발기, 운영기에서 잘 돌아가고 있음.
Listener 설정을 빼니깐 어느 정도 돌아가서 그런줄 알았음.

- 혹시나 해서 6.0에서 돌리니깐 에러가 자세하게 나옴.
클래스를 못찾는다.

- 여기 저기 뒤져보니 클래스 파일이 배포되지 않고 있었다.
D:\reps\eclipse_indigo_workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\TestWEBApp\WEB-INF\ 에 classes/가 없다.

왜.....?
여기 메커니즘은 잘 모르는데...
잘 실행되는 웹 어플리케이션과 비교해보니 조금 다른다.
무슨 이유인지 5번째 줄이 빠져 있다.

소스 디렉토리가 달라서 이걸 적용하다가 잘못된거 같기도 하고, SVN에서 받으면서 잘못 되었나???
3시간을 헤맷다.

이걸 잘 활용하면 환경 설정 파일을 다른 곳에 두고 배포할 수도 있겠다.
그리고 소스 디렉토리를 WEB-INF/ 아래에 두지마.
WEB-INF/ 가 통으로 배포되어서 소스까지도 배포된다.
(exclude 할 수 있을려나?)

- 그런데 다음날 실행해보니 또 404 에러가 떨어진다.
Clean을 한다.

Access restriction

Access restriction: The type UEInfoServiceContext is not accessible due to restriction on required library C:\jdk\j2sdk1.4.2_19\jre\lib\rt.jar

1. Build path에서 JRE Library를 삭제했다가 다시 추가하면 된다고 한다.
이건 좀 아닌듯.

2. Compile시 Acces rule을 변경한다.
Java Compiler - Errors/Warnings - Deprecated and restrited APIs - Forbidden reference (acess rule)
Change to warning or ignore.

[SVN] Path is not a working copy directory

Eclipse에서 프로젝트를 Share하려고 SVN을 선택했는데 에러가 발생함.


검색을 해보니 Cleanup을 하라고 하는데 아직 SVN에 올리지도 않았는데...쩝

이런 글이 있어서 JavaHL에서 JavaSVN로 바꿨다.

 


이클립스에서 표준 출력을 파일로 저장하기

Eclipse Java EE IDE for Web Developers를 사용하면 로컬 환경에서 WAS를 구동시키고, 테스트하기 쉽다.
표준출력이 Console 뷰로 출력되는데 WAS를 재시작하면 Console 내용이 지워져서 많이 불편했다.
이 표준출력을 파일로 저장하는 방법이 있다.


파일 위치를 지정할 수 있고 Append 옵션이 있다.

[SVN] RA layer file already exists

commit -m "" D:/reps/nwds/prt.xxx/src.core/net/test/TestComponent.java
  Adding         D:/reps/nwds/prt.xxx/src.core/net/test/TestComponent.java
  RA layer file already exists
svn: Commit failed (details follow):
svn: File '/svn/TestRop/prt.xxx/trunk/src.core/net/test/TestComponent.java' already exists

- 환경 : NWDS + Subclipse_0.9.3.3
- 특정 파일이 커밋이 안됨.
- 해당 파일 Update 비활성화
- Revert를 해도 변동없음.


- 해당 패키지를 Update 하면 다음과 같은 에러 발생
update -r HEAD D:/reps/nwds/prt.xxx/src.core/net/test
  Obstructed update
svn: Failed to add file 'D:/reps/nwds/prt.xxx/src.core/net/test/TestComponent.java': object of the same name already exists

- 저장소에서 해당 파일을 찾아보면 이미 존재하고 있음.
저장소의 파일과 작업본의 파일을 비교해 보면 동일하다.
그래서 작업본에서 해당 파일을 삭제하고 Update 받아서 해결함.

- Cleanup 으로 하면 된다고도 함.

cannot be resolved ...


com.sapportals.connector.connection.IConnection에는 close()가 없다.
그런데 샘플코드에서는 close()를 사용하고 있음.

잘못된 클래스를 참조하는 줄 알고 라이브러리를 뒤짐.
그러나...

com.sapportals.connector.connection.IConnection
    implements javax.resource.cci.Connection

javax.resource.cci.Connection에 close()가 있고 이 클래스가 들어있는 connector.jar를 참조하지 못해서 발생한 에러임.

NetBeans에서 SVN 저장소 Checkout하기 (Eclipse와 소스 공유)

1. 이클립스에서 웹프로젝트를 생성해서 SVN에 올림.

2. 넷빈즈에서 가져온다.


3. Local Folder에 소스는 내려받아졌다.
이때 내려받은 소스의 디렉토리명을 적절하게 변경한다.
위와 같은 경우는 TestWebapp이므로 변경할 필요가 없지만 저장소의 trunk 디렉토리를 받으면 로컬에도 trunk라는 이름으로 생김.

4. 프로젝트를 선택한다.


5. 프로젝트 생성 위치를 지정한다.


5. 각 디렉토리를 지정한다.


6. 버전관리하지 않아도 되는 리소스를 지정한다.


build.xml은 다른 곳에서 사용할 수 있으므로 제외
nbproject/ 는 넷빈즈에서 다시 생성해 주므로 제외
build/ 도 제외(여기서 안보이는 것은 Eclipse에서 이미 해서 그럴거야)
conf/ 는 포함시키는게 좋을 듯       [todo] 아직 미정임...
sun-web.xml 필요에 따라 설정을 추가할 수도 있으므로 포함시킨다.

Eclipse Refactor - Convert Local Variable to Field



setUp()를 생성하고, testCreate()의 session를 이동시킨다.(Alt+Up)
testEnrollStudents()의 session은 삭제

Eclipse Refactor - Inline

Eclipse Refactor - Move

패키지를 새로 생성할 때 유용함.
패키지가 생성된 후에는 클래스를 Drag and Drop으로 넣으면 된다.

svn:ignore에서 제외하기

todo=여기에 대한 정립을 하자. 결론은 .classpath를 잘 추가하면 된다. 그리고 .settings/도 올려야 함.
todo=svn사용시 제외 항목들(svn ignore)
target/
web-app/plugins/
web-app/WEB-INF/classes/    =todo

.classpath 파일을 svn:ignore에 포함시키면 안되는데 습관적으로 추가시켜 버렸다.
.classpath 파일을 형상관리하도록 다시 설정해야 함.

- Subclipse 기준
Team - Show Properties
svn:ignore 속성 변경후 commit   ([todo] 이걸 먼저 add to version control 처리를 해야 하나?)


그리고 나서 update, commit


WindowBuilder

- WindowBuilder Pro

- 플러그인 설치
Installing WindowBuilder Pro

  • WindowBuilder for Helios : http://dl.google.com/eclipse/inst/d2wbpro/latest/3.6
  • Indigo : http://dl.google.com/eclipse/inst/d2wbpro/latest/3.7

모두 선택했는데 GWT, SWT가 필요없으면 선택 해제

- 하나 그려보자
Java Project 생성
Swing Designer - Application Window Wizard 실행
getContentPane()를 선택하고 Layout을 Absolute Layout으로 선택한다.
JButton을 선택하고 버튼을 하나 만든다.
버튼에 연결된 이벤트(actionPerformed)로 이동해서 메세지창을 띄우도록 코딩한다.

VB나 PB가 부럽지 않다.
MFC로 윈도우 프로그래밍하려던 생각이 싹 사라진다.

Equinox p2 를 이용한 Eclipse 설치

이클립스를 여러 개 사용할 때 중복되는 플러그인을 관리할 수 있게 해준다.

무거운 플러그인을 사용할 때는 이클립스를 복사해서 사용하는데 Equinox p2 agent 를 이용하면 적은 용량으로 빠르게 이용할 수 있을거 같다.

- http://download.eclipse.org/equinox/ 에서 다운로드 받을 수 있다.
3.7M2
3.5

- 저장소를 추가할 때는 Metadata Repositories 와 Artifact Repositories 에 모두 추가한다.

- 설치하면서 마지막에 에러가 나서 실패함.

- 플러그인을 공유할 수 있어서 좋긴 한데, 이렇게 설치된 Eclipse SDK 에서 Java EE 플러그인을 설치해야 하는 일이 더 힘들거 같다.
Eclipse IDE for Java EE Developers 를 다운받아서 사용하고 다른 플러그인을 최소로 사용하는게 나을듯.

Eclipse에서 jar 실행시키기

무슨 말인고 하니.


jar 파일에서 Run As - Java Application (Alt + Shift + X, J ) 을 누르면 실행가능한 클래스가 나온다.
(프로젝트에서 위와 같이 하면 모든 실행가능한 클래스를 찾아 준다. Version 보기 좋다.)



Eclipse 에서 라이브러리 삭제후 import 가 되지 않을 때

SVN 에서 Update 를 받았는데 WEB-INF/lib/ 의 jar 파일 하나가 삭제 되었다.

지운 jar 파일을 참조하던 소스에 에러가 났는데, import 가 되지 않는다.


Build Path 를 보니 Web App Libraries 에 지운 jar 파일이 missing 으로 표시되어 있다.

Web App Libraries 내의 파일은 지워지지가 않는다.

Web App Libraries 를 삭제하고 Add Library 로 다시 설정하였다.

(처음에는 안되더니 몇 번 하니깐 되네...쩝)



SVN Commit 에러 - 시간이 오래되었습니다.

test 패키지를 삭제하고 commit 하였음.
(히스토리를 확인해보니 test 패키지에 있던 파일 삭제만 commit 이 되었다.)
test/ 가 남아서 이것도 commit 하려고 하니 에러가 발생한다.
이 포스팅대로 Java EE Perspective 에서 commit 해도 동일한 에러가 발생.
(해당 글에서는 update 를 하라고 했음)

에러가 발생할 당시 리비전이 3이었음.
삭제후 리비전이 43이므로 시간이 오래되었다는 에러가 발생한거 같다.
update 를 하니 리비전이 43으로 변경되었다.


commit 완료

TCP/IP Monitor

어떤 특이한 에러가 발생해서 이클립스 TCP/IP Monitor 로 확인해봤다.


Local monitoring port 는 브라우저에서 요청할 포트

Monitor 에는 실제 서버의 주소와 포트를 입력한다.



Request 와 Response 의 헤더도 볼 수 있다.
Response 를 텍스트, 브라우저로 렌더링해서 볼 수도 있다.

- SSL 을 모니터링하는 경우
Type 을 TCP/IP 로 둔다.
브라우저에서는 https://localhost:LocalMonitoringPort 로 요청한다.

Eclipse 에서 static import 를 쉽게 사용하기

테스트 코드를 작성하다 보면 org.junit.Assert 클래스나 org.hamcrest.CoreMatchers 클래스의 메서드를 많이 사용하게 되는데 이게 좀 귀찮은 부분이 있다.
메서드가 여러 개라서 일일이 다 적기는 힘들다.
그래서 와일드카드를 사용하는데, Eclipse 의 Organize Imports 기능을 사용하면 와일드카드로 import 한 코드가 실제 사용된 메서드로 바뀐다. [각주:1]]

그 후 import 되지 않은 메서드를 사용할때는?

매번 이러니 귀찮다.

그래서 Template 을 사용했다.
import static org.junit.Assert.*; 라는 구문이 삽입되도록 추가했다.
그러나 매번 소스 파일 최상단으로 이동해야 되서 귀찮아서 조금 사용하다 말았다.

이 문제에 대해서 여러 사람들이 고민하고 좋은 해결책을 제시했다.
Template 을 보다 보니 이미 import CoreMatchers, Test 라는 템플릿이 있었다.
여러 가지 방법들을 조합해서 몇가지 Template 을 만들었다.

 

create test method //잘안쓰나?

@${testType:newType(org.junit.Test)}
public void test${testname}(){
    ${si1:importStatic('org.hamcrest.CoreMatchers.*')}${si2:importStatic('org.junit.Assert.*')}${cursor}
}

 

import tests

${is2:importStatic('org.junit.Assert.*')}${is3:importStatic('org.springframework.test.web.servlet.setup.MockMvcBuilders.*')}${is4:importStatic('org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*')}${is5:importStatic('org.springframework.test.web.servlet.result.MockMvcResultMatchers.*')}${is6:importStatic('org.springframework.test.web.servlet.result.MockMvcResultHandlers.*')}${is7:importStatic('org.mockito.Mockito.*')}${is8:importStatic('org.mockito.Matchers.*')}${is9:importStatic('org.assertj.core.api.Assertions.*')}${is10:importStatic('org.mockito.ArgumentCaptor.*')}

${is1:importStatic('org.hamcrest.CoreMatchers.*')}${is2:importStatic('org.junit.Assert.*')}${is3:importStatic('org.springframework.test.web.servlet.setup.MockMvcBuilders.*')}${is4:importStatic('org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*')}${is5:importStatic('org.springframework.test.web.servlet.result.MockMvcResultMatchers.*')}${is6:importStatic('org.springframework.test.web.servlet.result.MockMvcResultHandlers.*')}${is7:importStatic('org.mockito.Mockito.*')}

 

assertThat with static import

${si1:importStatic('org.assertj.core.api.Assertions.*')}assertThat(${cursor}

assertThat(${cursor}, is(${si1:importStatic('org.hamcrest.CoreMatchers.*')}${si2:importStatic('org.junit.Assert.*')}

 

when

${si1:importStatic('org.mockito.Mockito.*')}when(${cursor}

 

이제는 테스트 코드 작성에만 신경쓰자.

 

 

  1. Number of static import needed for .* 를 99에서 1로 변경하면 된다고 함. [본문으로]

[IBM dWs] Java SE 6, Ecipse, Ant 를 이용한 간단한 웹 서비스

- Eclipse와 Java SE 6을 사용하여 독립형 웹 서비스 개발하기, Part 1: 웹 서비스 서버 애플리케이션
Create stand-alone Web services applications with Eclipse and Java SE 6, Part 1: The Web service server application
- Eclipse와 Java SE 6을 사용하여 독립형 웹 서비스 개발하기: Part 2: 웹 서비스 클라이언트 응용프로그램
Create stand-alone Web services applications with Eclipse and Java SE 6: Part 2: The Web service client application

- Java SE 6, Ecipse, Ant 를 이용해서 간단한 웹서비스를 구현하고 모니터링한다.

Java SE 6 JDK 설치
Eclipse JRE 설정

서버
Ant 를 실행시키면 com.myfirst.wsServer.jaxws 가 생김 서버를 실행시키고, Internal Web Browser 로 http://localhost:8080/wsServerExample?wsdl 을 입력하면 WSDL 을 볼 수 있다.

Eclipse 의 Web Services Explorer 를 이용해서 웹서비스를 테스트해 볼 수 있다.
Java EE Perspective 에서 Run - Launch the Web Services Explorer 을 선택하고
http://localhost:8080/wsServerExample?wsdl 를 호출해서 getGreeting 을 직접 호출해 본다.

클라이언트
wsimport 태스크를 실행하면 WSDL 를 참조해서 JAX-WS 관련 스텁?이 생성된다.
  • wsgen은 서비스 엔드 포인트 클래스를 읽고서 웹 서비스 전개 및 호출에 필요한 모든 아티팩트를 생성한다.
  • wsimport는 WSDL을 읽고서 웹 서비스 개발, 전개 및 호출에 필요한 모든 아티팩트를 생성한다.

- Eclipse TCP/IP Monitor 를 이용해서 모니터링을 할 수 있다.

황당한 실수

이클립스에서 경고해 준다.

Eclipse 프로젝트에 에러 표시가 없어지지 않는 경우 해결방법

하위 디렉토리에 에러는 없는데 프로젝트에는 에러 표시가 있다.


Problems 뷰를 보면 원인을 찾을 수 있다.

- 위 경우는 컴파일러 버전이 맞지 않은 경우다.
Java compiler level does not match the version of the installed Java project facet.

Java Compiler - Compiler compliance level과 Project Facets의 버전을 맞춘다.

Java Compiler-Compiler compliance level, Generated .class files compatibility, Source compatibility에서 버전을 변경할 수 있다.(org.eclipse.jdt.core.prefs에 저장됨)
Dynamic Web Project에서는 직접 변경해야 되는 경우가 생길 수 있다.

- 형상관리시스템에서 소스를 update했는데 test/ 가 없어진 경우도 있었음.

- ClassNotFoundException 이 발생했는데 확인해 보니 클래스 파일이 생성되지 않았다.
Problems 뷰에 자세히 나와 있다.

The project was not built due to "Could not delete '/Sample/build/classes/com'.". Fix the problem, then try refreshing this project and building it since it may be inconsistent


이클립스 신기한 기능

그동안 다른 프로젝트에 있던 소스가 필요해서 복사해서 붙여넣곤 했다.
더 좋은 기능 발견
소스를 복사해서 소스 디렉토리에 붙여넣으면 해당 클래스가 생기고 소스가 저장된다.
거기에 패키지까지 자동으로 만들어 진다.

우와...

이클립스 버그 경고 기능


Good~~~

Subversion에서 Tag를 잘못 단 경우

Subclipse에서 태그를 달았는데 trunk/ 가 생겼다.


URL을 변경하지 않고 그냥 달아서 발생했음.


Subclipse에서는 URL을 직접 적어야 한다.
http://1.2.3.4/rep/project/tags/R20100703A

이클립스에 설치된 플러그인 확인하기


FindBugs

- http://findbugs.sourceforge.net/

- 어플리케이션으로 직접 실행시키기
findbugs-1.3.9> java -jar lib/findbugs.jar
- or -
findbugs-1.3.9/bin/findbugs.bat 실행

프로젝트를 만들고 클래스, 부가적으로 사용되는 클래스, 소스 위치를 지정한다.

특정 패키지의 클래스만 분석하는 경우 패키지를 지정하고 소스는 루트 디렉토리로 지정해야 한다.
(소스도 특정 패키지로 지정하면 제대로 안나옴)

찾지 못한 클래스는 콘솔에 나온다.
Auxillary class locations에 포함시켜준다.

- 이클립스 플러그인
개발중에 사용하면 좋을거 같다.
플러그인이 싫다면 GUI 를 이용해서 확인하도록 할 것.

- Ant 로 실행시키기
findbugs.home=D:/resources/programs/java/findbugs-1.3.9/

devlib/에 findbugs-ant.jar를 넣어둔다.[각주:1]

  1. 2012-03-18 findbugs/lib/ 를 클래스패스에 포함시켰으므로 이 작업은 더이상 필요없다. [본문으로]

Eclipse에서 Ant로 HSQLDB 사용하기

간단한 테스트 데이터베이스로 사용하기에 이놈보다 좋은게 어디있겠냐.
예전 Tutorial에서 가져옴.
원출처는 여기
devlib.dir=res/devlib

db.driver=org.hsqldb.jdbcDriver
db.url=jdbc:hsqldb:hsql://localhost
db.name=baseball
db.username=sa
db.password=

Eclipse 바꾸기

- Search에서 Replace 버튼이 있다.

- 검색후 변경할 수 있다.