[INFO] [war:war {execution: default-war}]
[INFO] Packaging webapp
[HUDSON] Archiving C:\eGovFrameSvr\hudson\jobs\ok.egov\workspace\pom.xml to C:\eGovFrameSvr\hudson\jobs\ok.egov\modules\ok$egov\builds\2013-07-02_07-12-51\archive\ok\egov\1.0.0\pom.xml
[INFO] ------------------------------------------------------------------------
[ERROR] FATAL ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Cannot construct org.apache.maven.plugin.war.util.WebappStructure as it does not have a no-args constructor
---- Debugging information ----
message             : Cannot construct org.apache.maven.plugin.war.util.WebappStructure as it does not have a no-args constructor
cause-exception     : com.thoughtworks.xstream.converters.reflection.ObjectAccessException
cause-message       : Cannot construct org.apache.maven.plugin.war.util.WebappStructure as it does not have a no-args constructor
class               : org.apache.maven.plugin.war.util.WebappStructure
required-type       : org.apache.maven.plugin.war.util.WebappStructure
path                : /webapp-structure
line number         : 1
-------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] Trace
com.thoughtworks.xstream.converters.ConversionException: Cannot construct org.apache.maven.plugin.war.util.WebappStructure as it does not have a no-args constructor
---- Debugging information ----
message             : Cannot construct org.apache.maven.plugin.war.util.WebappStructure as it does not have a no-args constructor
cause-exception     : com.thoughtworks.xstream.converters.reflection.ObjectAccessException
cause-message       : Cannot construct org.apache.maven.plugin.war.util.WebappStructure as it does not have a no-args constructor
class               : org.apache.maven.plugin.war.util.WebappStructure
required-type       : org.apache.maven.plugin.war.util.WebappStructure
path                : /webapp-structure
line number         : 1
-------------------------------
	at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:63)
	at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:45)
	at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:46)
	at com.thoughtworks.xstream.core.TreeUnmarshaller.start(TreeUnmarshaller.java:117)
	...
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
	at java.lang.Thread.run(Thread.java:722)
Caused by: com.thoughtworks.xstream.converters.reflection.ObjectAccessException: Cannot construct org.apache.maven.plugin.war.util.WebappStructure as it does not have a no-args constructor
	at com.thoughtworks.xstream.converters.reflection.PureJavaReflectionProvider.newInstance(PureJavaReflectionProvider.java:59)
	at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.instantiateNewInstance(AbstractReflectionConverter.java:257)
	at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshal(AbstractReflectionConverter.java:124)
	at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:56)
	... 43 more
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 4 seconds
[INFO] Finished at: Tue Jul 02 07:12:57 KST 2013
[INFO] Final Memory: 20M/49M
[INFO] ------------------------------------------------------------------------
channel stopped
Finished: FAILURE


이 에러 메시지는 maven war plugin 이 Java7을 지원하지 못하기 때문이라고 합니다. jdk1.6으로 내리거나 아래 플러그인을 pom.xml에 추가해야 합니다.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.1.1</version>
</plugin>

from: http://stackoverflow.com/questions/7539970/cannot-construct-org-apache-maven-plugin-war-util-webappstructure-as-it-does-not




전자정부 표준프레임워크를 프로젝트에서 사용했는지 안 했는지 검증하는 방법입니다.


Q표준프레임워크를 적용가이드보면 '표준프레임워크 적용여부를 확인하는 간단한 방법 

'이 있습니다. 

1. 저희가 개발한 프로젝트에서 3가지 항목만 준수하여 적용되면 '표준프레임워크가 적용'되었다고 보면 되는건가요 ? 

2. 표준프레임워크 적용여부를 검증해주는 기관 또는 부서가 있는지요 ? 

3. 개발사 측에서 표준준수확인할 수 있는 가이드가 있는지 궁금합니다. 


A

보신 가이드는 개발자가 아닌 발주자가 참조하는 가이드 부분에 포함되어 있는 내용입니다. 
즉, 표준프레임워크에 대해 잘 모르시는 분이 대략적으로 표준프레임워크가 적용되어 있는지 확인하기 위한 용도입니다. 

보다 자세하게 기준을 말씀드리면 다음과 같습니다. 
- Annotation 기반의 Spring MVC 적용 
- Layered architecture 준수 (@Controller, @Service, @Repository) 
- Data Access Layer의 경우 iBatis 적용 등 입니다. 

보다 자세한 내용은 다음 링크의 문서를 확인하시면 됩니다. 
http://www.egovframe.org/wiki/lib/exe/fetch.php?media=egovframework:rte2:호환성가이드라인.ppt 

또한 표준 프레임워크 센터에서는 표준프레임워크 적용점검 서비스를 제공하고 있습니다. 

감사합니다. 


from: http://open.egovframe.kr/projects/qna/qna/6393



호환성가이드라인.ppt


eGovFrameSvr 서버 2.0.0에는 jdk1.5가 포함되어 있고, hudson의 세팅은 여기에 맞춰져 있습니다. 그래서 jdk1.6이상으로 맞춰진 프로젝트는 컴파일 되지 않는 이슈가 있습니다.


[INFO] [compiler:compile {execution: default-compile}]
[INFO] Compiling 10 source files to C:\eGovFrameSvr\hudson\jobs\ok.egov\workspace\target\classes
[HUDSON] Archiving C:\eGovFrameSvr\hudson\jobs\ok.egov\workspace\pom.xml to C:\eGovFrameSvr\hudson\jobs\ok.egov\modules\ok$egov\builds\2013-07-01_15-22-31\archive\ok\egov\1.0.0\pom.xml
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Compilation failure
Failure executing javac, but could not parse the error:
javac: invalid target release: 1.6
Usage: javac <options> <source files>
where possible options include:
  -g                         Generate all debugging info
  -g:none                    Generate no debugging info
  -g:{lines,vars,source}     Generate only some debugging info
  -nowarn                    Generate no warnings
  -verbose                   Output messages about what the compiler is doing
  -deprecation               Output source locations where deprecated APIs are used
  -classpath <path>          Specify where to find user class files
  -cp <path>                 Specify where to find user class files
  -sourcepath <path>         Specify where to find input source files
  -bootclasspath <path>      Override location of bootstrap class files
  -extdirs <dirs>            Override location of installed extensions
  -endorseddirs <dirs>       Override location of endorsed standards path
  -d <directory>             Specify where to place generated class files
  -encoding <encoding>       Specify character encoding used by source files
  -source <release>          Provide source compatibility with specified release
  -target <release>          Generate class files for specific VM version
  -version                   Version information
  -help                      Print a synopsis of standard options
  -X                         Print a synopsis of nonstandard options
  -J<flag>                   Pass <flag> directly to the runtime system



[INFO] ------------------------------------------------------------------------
[INFO] For more information, run Maven with the -e switch
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1 minute 31 seconds
[INFO] Finished at: Mon Jul 01 15:24:06 KST 2013
[INFO] Final Memory: 17M/31M
[INFO] ------------------------------------------------------------------------
Waiting for Hudson to finish collecting data
channel stopped
Finished: FAILURE


이를 해결하려면 허드슨 관리에서 JDK의 버전을 1.6 이상으로 맞춰 줘야 합니다. 메인 페이지에서 Hudson 관리 > Configure System > JDK 섹션으로 이동합니다.




수정 후에는 이상없이 빌드될 것입니다.



가상머신에서 ~/.m2/repository 를 찾지 못하는 경우입니다. 




C:\Users\kenu>mvn clean

[ERROR] Could not create local repository at \\vmware-host\Shared Folders\.m2\repository -> [Help 1]

[ERROR]

[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.

[ERROR] Re-run Maven using the -X switch to enable full debug logging.

[ERROR]

[ERROR] For more information about the errors and possible solutions, please read the following articles:

[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/LocalRepositoryNotAccessibleException


Git Bash를 통해서 mvn 의 경로를 찾았습니다. 제 경우 mvn이 세 가지 이상 설치되었기 때문이죠. Path 환경변수를 확인해도 될 것입니다.

which mvn


해당 maven의 conf폴더에 있는 settings.xml 파일을 다음과 같이 수정했습니다.


<!-- localRepository

   | The path to the local repository maven will use to store artifacts.

   |

   | Default: ~/.m2/repository

  -->

  <localRepository>~/.m2/repository</localRepository>


이후 잘 동작합니다.

http://youtu.be/Bs68Vpjtebo

스프링 코드 네비게이션 동영상 강의입니다.




관련된 페이지는 아래 슬라이드 20, 21, 22 페이지입니다.



JAVA_HOME 환경변수는 자바 개발의 시작입니다. 윈도우7에서 환경변수를 설정하는 방법을 알아봅니다.


탐색기에서 컴퓨터를 선택하고 컨텍스트 메뉴의 속성을 엽니다. 좌측에서 고급 시스템 설정을 클릭합니다.



고급 탭에서 하단의 환경 변수(N)... 버튼을 클릭합니다.



하단의 시스템 변수(S) 항목에서 JAVA_HOME을 선택하고 편집 버튼을 클릭합니다. 만약 처음이라면 새로 만들기(W)... 버튼을 클릭합니다.


변수 이름에 JAVA_HOME 을 입력하고, 변수 값에 설치된 경로를 붙여넣습니다. 

그리고 확인 버튼으로 열린 창들을 닫습니다.


cmd 창을 닫았다가 다시 엽니다. echo %JAVA_HOME% 라고 입력하면 설정된 환경변수 값을 확인할 수 있습니다.


한 가지 환경변수가 더 설정이 되어야 합니다. 바로 %Path% 입니다.

%JAVA_HOME%\bin; 

위 경로를 시스템 환경 변수 Path에 추가합니다. 

참고: http://okjsp.tistory.com/1165643255


jdk1.7이 현재 배포되는 버전입니다. 이전 버전인 jdk1.6을 다운로드 받으려면 http://java.sun.com 에서 Java SE로 이동합니다. 


Previous Releases 를 선택합니다.



Java SE 6를 선택합니다. 이전의 자바도 다운로드 받을 수 있게 링크가 제공됩니다. 하지만, 오라클의 정책에 따라서 이전 버전들은 로그인 해야 다운로드 받을 수 있습니다.




Java SE Development Kit 6u45 링크를 선택합니다. 1.6의 45번째 업데이트 버전입니다.



동의 항목을 체크하고 하단에서 OS에 맞는 jdk를 다운로드 하면 됩니다.



로그인을 해야 다운로드 받을 수 있습니다.



다운로드를 다 받으면 폴더를 열어서 파일을 실행합니다.



설치를 마치면 C:\Program Files\Java\jdk1.6.0_45 폴더에 설치됩니다. 이 경로는 JAVA_HOME 환경변수 값이 됩니다.



환경변수 JAVA_HOME을 아래 링크를 참고해서 적용하세요.

http://okjsp.tistory.com/tag/java_home


cmd창을 관리자 모드로 실행하지 않으면 서비스를 실행할 수 없습니다.


C:\Users\kenu>net start tomcat6

시스템 오류 5이(가) 생겼습니다.


액세스가 거부되었습니다.



C:\Users\kenu>net start svnserve

시스템 오류 5이(가) 생겼습니다.


액세스가 거부되었습니다.



C:\Users\kenu>




이런 경우 cmd.exe 를 관리자 모드로 실행합니다.



관리자 권한으로 창이 떠 있는 경우, 상단 주소줄에 관리자:라는 문구가 보입니다. 물론 서비스도 명령어로 제어가 가능합니다.



메일로 온 질문에 답변을 공유합니다.


====

Q:

좋은 강의 감사드립니다.

강의 내용을 정리하면서 몇가지 질문이 생겼습니다.


1. Junit 을 사용할 테스트는 무조건 return 구문과 출력 구문을 만들어야 하나요?

return 값이 void 인 경우는 어떻게 하나요?


2. 예전 책을 보면 tomcat을 컨테이너라고 하고

웹서버와 구분을 합니다. 웹서버 아파치와 구분을 하는데

정확히 웹서버와 was, 컨테이너의 차이를 모르겠습니다.


동적인 페이지를 처리하기위해 was가 필요하다고 하니

was가 웹서버의 역할까지 포함하고 있는 것이라고 생각했는데

was와 웹서버를 같이 사용하는 경우도 있고...개념이 헷갈립니다.


3. Spring에서 service와 controller의 차이가 어떤 것인지 알고 싶습니다.

실제로 서비스에서 하는 행위를 컨트롤러 단에서 해도 상관이 없다고 생각됩니다.


4. Spring과 스트럭쳐를 같이 사용할 이유가 있는지 알고 싶습니다.

처음 공부할 때 두가지를 같이 병행하는데 역시 spring만으로 구현이 가능한 것 같습니다.


마지막으로 가능하다면 강의에 사용하셨던 구글 문서 주소를 다시 알려주셨으면 합니다.

이번에 윈도우 8.1을 써본다고 하다가 그만 즐겨찾기를 지워버리는 실수를 해서....

단순히 업데이트로 생각했다가 많은 자료가 사라져 버렸습니다.

구글 크롬에 북마크는 정리가 끝난 사이트만 관리하다보니 이런 불상사가 생겼네요.


더운 날이 계속되는 여름입니다.

건강관리에 유의하시기 바랍니다.

다시 한번 좋은 강좌와 okjsp에 많은 도움에 감사드립니다.


A:

안녕하세요.

답변 드리겠습니다.


1. void 인 함수의 역할이 무엇인지, 상태값을 변화시킨다면 그리고 그것을 검증해야 한다면, 

테스트를 위해, 상태값을 읽어오는 함수를 통해서 테스트할 수 있을 것입니다.


2. 웹서버는 html, css, js, image들을 서비스하는 아파치 웹서버 (http://httpd.apache.org), 

IIS 등이 있습니다.  WAS는 Web Application Server의 약자이고, JSP/Servlet을 실행할 수 있는

서블릿 컨테이너와 EJB가 실행되는 EJB 컨테이너로 구성되어 있습니다.

초기에는 WAS의 정적인 파일 처리 능력이 낮기 때문에 웹서버와 연결해서 사용했는데, 

(mod_jk, ajp 같은 커넥터류) 요즘은 WAS 자체에서 http 서버의 역할을 감당할 만한 성능이 나와서

단독으로 웹서버의 역할까지 커버하는 경우가 많습니다.


3. 강의 때도 말씀드렸는데, request, response 같은 객체와 분리된 비즈로직이 Service에서 실행됩니다.

저 두 파라미터가 Service에 없다는 것은 Service를 WAS와 분리해서 단독으로 실행할 수 있게 됩니다.

Controller의 역할은 Model과 View를 연결해 준다는 본연의 역할이 있지요.

http://csl.ensm-douai.fr/noury/20 MVC song인데, 동영상과 가사를 함께 생각해보시면 도움이 되실 것입니다.


4. 스트럿츠를 스프링과 연계시키는 이유는 제 생각으로는 당시 스트럿츠로 만들어진 시스템이 많았고,

스트럿츠 개발자들이 많았기 때문이 아닌가 생각됩니다.

지금은 말씀하신대로 스프링MVC로 모두 커버 가능합니다.


감사합니다.


구글문서 주소는 http://bit.ly/eclipse201306 입니다.


서브버전 예외 폴더

프로젝트에서 target폴더는 버전관리에서 제외할 폴더입니다. target은 메이븐에서 만드는 폴더이고, 컴파일한 클래스와 jar, war 파일처럼 산출물이 만들어지는 폴더입니다. 이러한 폴더는 소스만 있으면 언제든지 재생할 수 있고, 용량이 크기 때문에 버전관리에서 제외합니다. 제외하는 방법은 다음과 같습니다.

물음표(?)가 붙은 target 폴더를 선택합니다. 컨텍스트 메뉴에서 Team > Add to svn:ignore... 항목을 클릭합니다.
<그림> svn:ignore



target 폴더를 버전관리하지 않도록 svn:ignore에 추가를 확인하는 창이 뜹니다.

<그림> target 폴더 제외


프로젝트 명 앞의 부등호 기호(>)는 해당 프로젝트에 변경이 일어났다는 것을 뜻합니다. 환경적인 변화도 커밋의 대상이 됩니다. 프로젝트를 선택하고 Team > Synchronize with Repository 항목을 클릭합니다.
<그림> 저장소 동기화 퍼스펙티브


마찬가지로 커밋 창에는 ignore target 이라는 코멘트를 답니다. 물론 한글로 코멘트를 달아도 됩니다.
<그림> 커밋 코멘트

+ Recent posts