Translate

2014년 12월 26일 금요일

[HTML][Mobile] 웹 접근성을 생각한다면 iframe 을 사용하면 안되는 이유 (Android - TalkBack 이슈)



이미지를 표시할 수 없거나 할때 대체텍스트를 사용하여 어떤 이미지인지 보여주는 용도로 알고있었는데 최근 작업한 것에서는 좀더 신경써야 할 부분이 되어버렸다.

바로 모바일 웹 접근성 검사 이슈가 있었다.




시각이 불편한 사용자들을 위해서 Android 와 iOS 에서는 다음과 같은 기능을 제공한다.

Android - TalkBack (톡백 또는 토크백)

iOS - VoiceOver (보이스오버)






해당 기능을 켠 상태로 웹페이지를 탐색을 하게되면 해당 페이지의 항목들을 소리내어 읽어준다.

실제로 사용을 해보니 눈을 감고 웹페이지를 사용할 수 있을 정도이다.
(물론 모바일 웹 접근성에 대해서 훌륭히 제작된 페이지의 경우에만..)







모바일 웹 접근성 페이지를 만들 때 iframe 태그를 가급적 사용하지 않는 것이 좋다고 생각을 하는데 이유는 Android 에서 치명적인 결함이 있다.



1. iframe 내부에 있는 컨텐츠에 focus 이동이 되지 않는다.
   (iframe 자체를 선택 시 iframe 에 focus 가 맞춰지며 내부로 들어가지 않는다. double tab 으로 액션을 하게되면 처음에 선택한 위치에 링크가 있다면 링크로 이동이 되지만 링크가 여러개인 경우 시각이 불편한 사용자는 어떤 링크를 클릭했는지 인지할 수 없다.)

2. 왼쪽에서 오른쪽으로 스와이프 할 시 iframe 으로 focus가 정상적으로 이동되지 않는다.
   (1번에서의 설명대로 iframe 을 직접 tab 하면 focus 선택은 된다.)












눈을 감고 인터넷을 직접 해보니 2번의 이슈가 발생을 하여 Div 나 Span 태그를 읽고 있다가 iframe 으로 focus 이동이 되지 않아 iframe 뒤에있는 Element 로 이동을 할 수 없는 문제가 발생했다.

iframe 내부에 있는 컨텐츠만 읽지 못하는게 아니라 다른 멀쩡한 컨텐츠 까지도 접근을 할 수 없으니 상당히 치명적이라고 할 수 있다.







대체방법


 iframe 내부에 있는 페이지의 HTML 코드를 긁어온 다음에 사용자에게 보여질 페이지에 끼워 넣는방법


<html><head></head>
<body>
<div>
...
<html><head></head><body> Google Website </body></html>
...
</div>
</body>
</html>

 * 위의 예제에서 html 을 끼워 넣을때는 html, head, body 태그와 같은 Element 는 제거 후 넣어줘야 한다.


결과적으로 iframe 이 들어가는 페이지는 보통 웹서버에서 뿌려줄 테니 해당 내용을 가져와서 같이 보여주면 될듯 한데..

1. iframe 내부에 들어가는 페이지를 직접 수정이 가능하다면 더 좋은 일이고
2. 직접 하지 않더라도 협업 업체라면 서로 협의 후 알맞게 수정을 하면 되지 않을까 싶다.
3. 하지만 네이버구글과 같이 일반적으로 공개되어 있는 페이지라면 충돌나는 기능이 있는지 테스트 및 가공이 필요하다.







만약에 불가피하게 iframe 을 사용해야 한다면 다음과 같이 사용을 할 수 밖에 없다고 생각한다.


1. iframe 태그의 title 속성에 iframe 의 정보를 최대한 많이 집어 넣어준다.
2. 몇개의 버튼이나 링크가 있는경우 선택을 해야 하는 경우라면 iframe 을 쪼개서 하나의 iframe 에 하나의 링크만 나오게 한다.
3. iframe 내부에 있는 내용이 변경된다면

iframe 을 넣으면서 조금더 불편하게 만들 수 있지 않을까 고민을 했지만 다른 대안이 따로 떠오르지 않는다.
(좋은 방법이 있다면 댓글로 알려주세요.)


2014년 12월 5일 금요일

[Adsense][Chrome] 크롬에서 갑자기 내 애드센스 영역에 색깔이 표시된다면!?



어느날 갑자기 애드센스가 나오지 않아 고민을 하다가 PIN 문제라는 것을 알고 해결을 했다.

링크 => [Adsense] 잘 나오던 애드센스가 이유없이 갑자기 노출되지 않을때..




그때부터 였나??
애드센스 영역에 색깔이 입혀져서 나오기 시작했다.
(다른 웹페이지의 애드센스는 멀쩡한데 내 애드센스만 그렇게 나온다.)









PIN 문제를 해결하고도 원인이 없어지지 않자 광고가 잘 눌리기는 할까 하고 클릭을 해봤더니 광고가 나오지 않을 당시 이것저것 알아보다가 설치한 'Google 게시자 툴바' 플러그인 때문에 위와 같이 나온다는것을 알았다.


애드센스 페이지의 하단부분에 'Google 게시자 툴바' 설치 링크가 있는데..
설치를 하게되면 크롬에서 내 애드센스가 저런 식으로 보여지게 되며 해당 광고를 클릭 시 광고가 실행되는게 아니라 해당 광고정보와 광고분석 정보가 나오게 된다.



2014년 12월 1일 월요일

[Adsense] 잘 나오던 애드센스가 이유없이 갑자기 노출되지 않을때..




블로그를 하며 Adsense 를 붙였더니 적은금액이긴 하지만 매달 조금씩 오르는 광고비를 보면서 흐믓해 하고 있었는데..

어느순간부터 광고가 노출되지 않고 있었다.



혹시나 정책 위반된것 이 있을까싶어
정책위반페이지(https://www.google.com/adsense/app#policy-violations) 에 들어가서 확인해 봤는데 메시지가 온것도 없었다.




뜨문뜨문 인터넷을 며칠째 찾아봤는데 의심이 될만한 링크를 발견했다.
https://productforums.google.com/forum/#!topic/adsense/hpTqb2ec3Og




누적액이 어느정도 모이자 주소를 확인하는 PIN 번호를 입력하는 프로세스가 활성화 되었는데..
두번이나 PIN을 받지 못한 상태이고 마지막으로 회사주소로 PIN 을 받을 수 있도록 주소를 넣고 요청을 했다.
아마 요청한지 거의 한달 가까이 되지 않았을까 싶은데..

혹시 PIN 번호 인증을 하지 않아서 Adsense 계정에 문제가 생긴걸까 생각하고 있다.

회사에서 우편 받은게 없다면 결국.. 민증을 구글에 보내서 인증하는 방법으로..;;
신분증명서로 확인요청 페이지: https://support.google.com/adsense/answer/157667

이 글은 추후 업데이트 예정!!



=======================
증상은 다음과 같았다.

블로거 (blogger.com)

따로 오류가 있는 것은 아니고 정상적으로 요청을 했으나 받아온 광고가 없었다.








개인사이트에 테스트로 만들어본 페이지

같은 소스이지만.. 403 Forbidden 에러가 발생했다.
해당 URL이 Adsense 페이지에 승인되지 않은 페이지라서 발생하는 듯 싶다.
승인요청 페이지: https://www.google.com/adsense/app#upgrade






===========================
2014. 12. 01

포스팅을 올리고 저녁에 블로거(blogger.com) 의 블로그 템플릿 부분에서 Adsense 광고 스크립트를 가지고 온 것을 다시한번 붙어 넣어 보았다.

그리고는 갑자기 아래와 같이 광고가 나와야 하는 부분에 영역표시가 생겼다.
(요청 resonse code는 307로 변경이 되었다.)





===========================
2014. 12. 05 추가

다음과 같은 이유때문에 광고영역에 색깔로 표시가 되는 것이었다.
링크 => [Adsense][Chrome] 크롬에서 갑자기 내 애드센스 영역에 색깔이 표시된다면!?









===========================
2014. 12. 01 추가


하.. 역시.. 혹시나 했는데..

애드센스 페이지에서 다음과 같은 문구를 발견했다.
(문구가 달라졌다.)



이전에는 PIN을 입력해 달라는 문구만 있었는데 지금은 광고가 게재되지 않는다고 다음과 같이 문구가 바뀌어 버렸다.


아직 주소(PIN)가 확인되지 않아 광고 단위에서 광고가 게재되지 않고 있습니다. 메일을 통해 PIN을 받으셨다면 여기를 클릭하여 주소를 확인해 주세요.



PS.
아.. 우편으로 받기보다는 그냥 민증을 스캔해서 보내야 할까..






===========================
2014. 12. 04 추가

인터넷으로 찾아보니 적립 기준금액이 도달한 시점에서 PIN번호를 일정기간안에 입력하지 않으면 광고노출이 차단이 된다고 한다. ㅠㅠ

구글 애드센스 PIN핀번호 미수령시 이메일로 요청하기
구글 애드센스 PIN 핀번호 미제출로 인한 빈광고 노출에 대한 애드센스지원팀의 해결책


결국 민증 사진을 찍은걸 구글측에 보냈다.
어떻게 진행될 것인지 궁금해진다.




===========================
2014. 12. 05 추가

아침에 일어나 메일을 확인해보니 다음과 같이 메일이 왔다.


어제 구글에 신분증 확인요청을 한 후 얼마 되지 않아서 바로 답장이 왔었나 보다.

왜 이제서야 신분증을 보냈는지..
진작 보낼껄..;;

답답하면 PIN 우편 받는거 기다리는것 보다는 그냥 내 정보의 주소를 업데이트 후 신분증 보내는게 훨씬 속편할 것 같다.



2014년 11월 30일 일요일

[멜론] 노래듣기 및 mp3 다운로드 안될 때 조치방법




증상 발생일자: 2014. 11. 30


멜론에서 mp3 를 다운로드 받으려 유료결재를 했는데..
mp3를 다운받으려 할 시 다운로드가 되지 않는 문제가 있었다.


다음과 같은 환경에서 증상이 발생했다.
한성노트북: Win7 + IE11 , Win7 + Chrome
조립컴퓨터: Win XP + IE8


원인은 '멜론플레이어'를 설치하지 않아서 발생한 것이었다.

멜론플레이어 다운로드 링크




멜론 플레이어를 설치하지 않았을때의증상은 다음과 같다.

1. 노래듣기 버튼을 눌러도 아무동작 하지 않는다.
2. mp3 다운로드 할 시 새로열린 팝업창에서 '다운로드' 버튼을 누를 시 창이 닫히고 아무런 반응이 일어나지 않는다.



보통은 '노래듣기' 버튼을 누르거나 mp3 '다운로드' 버튼을 눌렀을 시에 액티브엑스 다운로드 및 실행이 되어 멜론플레이어가 실행이 되어야 하나..
현재는 정상적으로 작동이 되지 않아 문제가 있는 것으로 보였다.


이런 별거 아닌걸로 한시간 넘게 알아보다니;;


2014년 11월 28일 금요일

[리뷰][서적] new C언어 입문[중급편] (코딩한줄 없이 C언어 원리를 깨우칠 수 있는 책!!)




New C언어 입문 - 10점
HARUHIKO HAYASHI 지음/영진.com(영진닷컴)



iOS를 공부해 보기전에 Objective-C 가 C언어에 기반한 언어라길래 C언어책을 뭘 볼까 하다가 'new C언어 입문[기초편]' 을 집어들었는데.. 너무 기초적인 내용이 나와서 바로 중급편을 집어 들었다.

너무 어렵진 않을까 걱정했는데..
다행히 어렵다기 보다는 그냥 '아~ 그렇구나~' 하고 넘어갈 수 있는 수준이었다.
(기초편,중급편 둘다 대학교 다니던 시절에 산 책인데.. 그당시에는 기초편만 열심히 읽었던 기억이 있다.
  지금은 JAVA 6년차가 되다보니.. 중급편을 보면서 JAVA언어와 비교해서 어떤점이 다르구나.. 하면서 술술 읽어나갔다.)


일단은 프로그램 경력자라면 많은 사람들이 C언어를 할 줄 알겠지만..
학부때 1년정도 해보고 그 뒤로는 C언어를 해보지 않은 나로써는 개념을 거의 다 잊어버려서 C언어를 다시 공부할 수 밖에 없었다.


C언어를 공부하려 하는 프로그램경력자(또는 좀더 깊숙히 공부하고싶은 학생)가 보기에 참 좋은 서적이라고 생각된다.


많은 C언어 서적들이 예제위주로 나오고 하다보니 getchar 라던지.. scanf 라던지..
라이브러리 사용법을 익히는데 시간이 들어가는 반면에 이 책은 그런 라이브러리보다는 순수하게 C언어의 개념에 대해서 접근을 한다.




그리고 책의 3/4정도 이후인

16. 콘솔 입출력 함수
17. 입출력 이외의 표준 함수
18. 파일 처리 함수

위 챕터에서 라이브러리(기본함수)에 대해서 사용방법에 대해 설명을 해 놓았다.



사실 경력자 입장에서 해당 언어의 특성이나 메커니즘이 중요한거지..
API 같은건 그냥 사용방법을 익히면 되는 것이니 이것만큼 경력자에게 좋은 책이 없다고 생각한다.

C언어를 설명하면서 예제도 너무 간단해서 따로 코딩을 해볼 일도 없다.
이 책을 3일동안 봤는데 함수포인터 부분에서 '이건 안되려나?' 라는 생각에 예제소스 하나를 만들어 볼 정도??



'중급편' 책을 읽었으니..
자~ 이거 한번 만들어 보시오~ 라고 하면 당연히 바로는 주로 사용하던 언어처럼 쓸 수는 없겠지만..
남들이 만들어 놓은 소스를 분석하는데에는 크게 무리가 없을 거라고 생각이 된다.


앞으로는 16,17,18,부록 챕터에 있는 부분을 레퍼런스로 보면서 C언어를 사용하면 될듯 하다.


이 책으로는 C언어에 대해서 이해를 할 수 있는것이지 코딩실력을 늘리기 위해서는 C언어로 알고리즘 같은걸 만들다보면 좀더 자연스럽게 코딩이 되지 않을 듯 싶다.



PS.
참으로 설명이 너무 맘에들었다.
포인터를 설명하기전에 왜 포인터란게 나오게 되었는지 어셈블리어 부터 시작해서 설명을 해주고 있다.
그렇다고 어셈블리어를 알아야만 이해할 수 있는 것도 아니고 설명을 하기위한 정도만 간단한 소스를 보여주며 친절히 설명을 해주는 설명에 너무 고맙다.
(학부생때 왜 안읽어봤나 몰라.. 진작봤으면 전공점수 좀 잘 나왔을 텐데..)



2014년 11월 25일 화요일

[리뷰][서적] 시스템 관리의 핵심 (너무 오래되어 레거시적인 개념만 배울 수 있는 책..)




시스템 관리의 핵심 - 2점
AEleen Frisch 지음, 홍상욱 옮김/한빛미디어(한빛아카데미)



이미 절판되어 중고를 살수밖에 없겠지만..
실제로 내가 본책은 개정3판이 아니라 아래의 개정2판을 중고로 구매하여 보았다.

시스템관리의 핵심 - 2점
AEleen Frisch 지음, 장훈 옮김/한빛미디어(한빛아카데미)






WAS나 기타 데몬 프로그램들이 수행될 때 시스템에 크게 부하를 주는 문제가 생겨서 트러블슈팅할때 도움이 될까 싶어 샀지만 너무나도 실망을 했다.

중간에 메모리관리 부분에서도 ps 명령어나 top 명령어의 컬럼 하나하나 소개가 있는 듯 하여 좀더 디테일 하게 알 수 있겠다 싶었는데..

책의 전반적인 내용은 기본적으로 Unix 에 치중이 되어있지만 Linux 에 대해서도 설명이 나오긴 한다.

하지만 개정2판 서적의 경우 1998년에 출판된 서적이다보니 지금의 시스템과는 너무나도 거리가 있었다.



가장 인상깊었던게 'vi 가 실행되지 않을 경우를 대비해서 ed에디터를 다룰줄 알아야한다.' 라는 구문이었다.


지금에서야 vi 가 없는 Unix/Linux 가 있을까 싶은데..
이렇게 설명하는 기술이 너무 오래되어 지금은 봐도 사용할 수 없거나..

Unix 위주로 하다보니 AIX, HP-UX, SunOS(지금의 Solaris) 의 명령어들이 설명이 되어지고 있고, 지금은 아예 사용되지 않는 SCO Unix 에 대해서도 명령어가 나오고 있다.


기본 개념에 대해서는 충실히 설명하려 노력하고 있으나 커널 전문서적이 아니라 시스템관리 서적이다보니 그냥 자세히만 설명을 해주고 그리 심도있게 다루지는 않는다.




얼마전에 서적을 구입해서 오늘 펼쳐봤는데 앞부분만 열심히 읽어보다가 안되겠다 싶어서 그냥 대충대충 훓어보고 말았다.
바로 중고로 팔 예정..


[리뷰][서적] 유닉스 리눅스 프로그래밍 필수 유틸리티



유닉스.리눅스 프로그래밍 필수 유틸리티 - 10점
백창우 지음/한빛미디어(한빛아카데미)


위의 링크는 개정판인데..
나는 2004년 발행된 이전버전의 책을 봤다.
원판이 560페이지 정도인데 개정판은 800페이지 가까이 되는거보니
나중에 좀더 관심이 가거나 직접적으로 관련된 일을 할 때는 개정판을 사야 할 수도 있겠다.


앞으로는 어떻게 될지 모르겠지만..;;
아직까지는 앞으로도 리눅스에서 C나 C++ 같은걸 코딩할 것 같지는 않다고 생각한다.

하지만 시스템관리쪽 관련하여 관심이 많다보니..
책을 구매하여 읽어보게 되었다.



vi

당연히 vi 의 왠만한 기본기능을 사용할 수 있었지만 이 책을 보고서 "아~ 이런기능까지.." 라는 느낌이 들었다.
vi 에 대해서 꽤 자세히도 나온다.
이정도면 리눅스에서 소스를 고치는 작업에 대해서 크게 불편하지 않게 사용이 가능할 것 같다.



gcc & gdb

내가 C나 C++을 전문적으로 하는것도 아니었긴에 컴파일 과정에 대해서 정확하게는 몰랐는데 개념을 잘 짚어주어 이해할 수 있었다.
Linux/Unix 관리를 하다보면 make 로 컴파일 하거나 하는 경우가 있었는데 원리를 이해하게 되었다는 것에 대해서 참 기뻤다.



make

예전에는 apache 설치를 하면서 './configure --prefix=/usr/local/share/apache' 같은 옵션을 보면서 앞에 prefix 를 입력하면 저 위치에 설치가 되는구나 정도만 알았는데..
configure 스크립트를 직접 생성도 해보고 Makefile 도 직접 생성해 보면서 왜

./configure
make
make install

명령어와 같이 입력을 해주는지 알게되었고 위와같이 입력 시 어떤 동작으로 컴파일되며 설치가 되는지 이해하게 되었다.






PS.
JAVA 프로그래머 이지만 시스템쪽에 관심이 있다보니 읽게 되었는데 C언어에 대해서는 소스의 난이도가 아주 기초적이라서(C언어 함수만 알아도 되는정도..) 실제 시스템관리자가 gcc나 make 에 대해서 이해하는 용도로 읽어보면 좋을 듯 싶다.




실습을 Mac(OSX) 에서 작업을 하다보니 기본적으로 설치되어있지 않은 툴이 있어서 따로 설치하는 방법을 정리해봤다.

[GDB][OSX] Mac 에 gdb 설치하기
[OSX] Mac에 autotools(autoconf, automake) 설치하기



2014년 11월 22일 토요일

[OSX] Mac에 autotools(autoconf, automake) 설치하기



다음 사이트에서 설치방법을 확인했다.
Installing Autoconf, Automake & Libtool on Mac OSX Mountain Lion


그리고 국내 사이트에서 쉘로 만들어 놓으신 분이 있어서 같이 참조를 한다.
AUTOTOOLS ON OSX



설치 방법은 간단하다. 아래의 작업만 해주면 끝!!


curl -OL http://ftpmirror.gnu.org/autoconf/autoconf-2.69.tar.gz
tar -xzf autoconf-2.69.tar.gz 
cd autoconf-2.69
./configure && make && sudo make install

curl -OL http://ftpmirror.gnu.org/automake/automake-1.14.tar.gz
tar -xzf automake-1.14.tar.gz
cd automake-1.14
./configure && make && sudo make install

curl -OL http://ftpmirror.gnu.org/libtool/libtool-2.4.2.tar.gz
tar -xzf libtool-2.4.2.tar.gz
cd libtool-2.4.2
./configure && make && sudo make install




혹시나 나중에 파일이 다운로드 되지 않는 경우가 발생하지 않을까 싶어서
다운로드 할수 있도록 링크를 올려둔다.

Download autotools






나는 쉘에서 다음과 같이 작업을 했다.


1004lucifer:~ 1004lucifer$
1004lucifer:~ 1004lucifer$ mkdir temp
1004lucifer:~ 1004lucifer$ cd temp
1004lucifer:temp 1004lucifer$
1004lucifer:temp 1004lucifer$ curl -OL http://ftpmirror.gnu.org/autoconf/autoconf-2.69.tar.gz
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 327 100 327 0 0 131 0 0:00:02 0:00:02 --:--:-- 131
100 1882k 100 1882k 0 0 370k 0 0:00:05 0:00:05 --:--:-- 1017k
1004lucifer:temp 1004lucifer$
1004lucifer:temp 1004lucifer$ tar -xzf autoconf-2.69.tar.gz
1004lucifer:temp 1004lucifer$ cd autoconf-2.69
1004lucifer:autoconf-2.69 1004lucifer$ ./configure && make && sudo make install
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... build-aux/install-sh -c -d
checking for gawk... no
checking for mawk... no
checking for nawk... no
checking for awk... awk
checking whether make sets $(MAKE)... yes

...

Making install in man
make[3]: Nothing to be done for `install-exec-am'.
test -z "/usr/local/share/man/man1" || ../build-aux/install-sh -c -d "/usr/local/share/man/man1"
/usr/bin/install -c -m 644 ./autoconf.1 ./autoheader.1 ./autom4te.1 ./autoreconf.1 ./autoscan.1 ./autoupdate.1 ./ifnames.1 ./config.guess.1 ./config.sub.1 '/usr/local/share/man/man1'
1004lucifer:autoconf-2.69 1004lucifer$
1004lucifer:autoconf-2.69 1004lucifer$
1004lucifer:autoconf-2.69 1004lucifer$
1004lucifer:autoconf-2.69 1004lucifer$
1004lucifer:autoconf-2.69 1004lucifer$
1004lucifer:autoconf-2.69 1004lucifer$ cd ..
1004lucifer:temp 1004lucifer$
1004lucifer:temp 1004lucifer$ curl -OL http://ftpmirror.gnu.org/automake/automake-1.14.tar.gz
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 327 100 327 0 0 435 0 --:--:-- --:--:-- --:--:-- 436
100 2181k 100 2181k 0 0 613k 0 0:00:03 0:00:03 --:--:-- 1052k
1004lucifer:temp 1004lucifer$
1004lucifer:temp 1004lucifer$ tar -xzf automake-1.14.tar.gz
1004lucifer:temp 1004lucifer$
1004lucifer:temp 1004lucifer$ cd automake-1.14
1004lucifer:automake-1.14 1004lucifer$
1004lucifer:automake-1.14 1004lucifer$ ./configure && make && sudo make install
checking whether make supports nested variables... yes
checking build system type... x86_64-apple-darwin13.3.0
checking host system type... x86_64-apple-darwin13.3.0
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... lib/install-sh -c -d

...

chmod +x '/usr/local/share/automake-1.14/compile'
chmod +x '/usr/local/share/automake-1.14/py-compile'
chmod +x '/usr/local/share/automake-1.14/ar-lib'
chmod +x '/usr/local/share/automake-1.14/test-driver'
chmod +x '/usr/local/share/automake-1.14/tap-driver.sh'
chmod +x '/usr/local/share/automake-1.14/tap-driver.pl'
1004lucifer:automake-1.14 1004lucifer$
1004lucifer:automake-1.14 1004lucifer$
1004lucifer:automake-1.14 1004lucifer$
1004lucifer:automake-1.14 1004lucifer$
1004lucifer:automake-1.14 1004lucifer$
1004lucifer:automake-1.14 1004lucifer$
1004lucifer:automake-1.14 1004lucifer$ cd ../
1004lucifer:temp 1004lucifer$
1004lucifer:temp 1004lucifer$ curl -OL http://ftpmirror.gnu.org/libtool/libtool-2.4.2.tar.gz
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 326 100 326 0 0 397 0 --:--:-- --:--:-- --:--:-- 397
100 2570k 100 2570k 0 0 670k 0 0:00:03 0:00:03 --:--:-- 940k
1004lucifer:temp 1004lucifer$
1004lucifer:temp 1004lucifer$ tar -xzf libtool-2.4.2.tar.gz
1004lucifer:temp 1004lucifer$
1004lucifer:temp 1004lucifer$ cd libtool-2.4.2
1004lucifer:libtool-2.4.2 1004lucifer$
1004lucifer:libtool-2.4.2 1004lucifer$ ./configure && make && sudo make install
## ------------------------- ##
## Configuring libtool 2.4.2 ##
## ------------------------- ##

checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... libltdl/config/install-sh -c -d
checking for gawk... no
checking for mawk... no
checking for nawk... no
checking for awk... awk

...

test -z "/usr/local/share/man/man1" || libltdl/config/install-sh -c -d "/usr/local/share/man/man1"
/usr/bin/install -c -m 644 ./doc/libtool.1 ./doc/libtoolize.1 '/usr/local/share/man/man1'
1004lucifer:libtool-2.4.2 1004lucifer$
1004lucifer:libtool-2.4.2 1004lucifer$
1004lucifer:libtool-2.4.2 1004lucifer$ cd ../
1004lucifer:temp 1004lucifer$
1004lucifer:temp 1004lucifer$ cd ../
1004lucifer:~ 1004lucifer$ rm -rf temp/
1004lucifer:~ 1004lucifer$




[GDB][OSX] Mac 에 gdb 설치하기



Linux 와는 다르게 OSX에는 gdb 가 기본적으로 설치되어 있지 않아서 설치하느라 이곳저곳 찾아봤는데 제대로 된 곳을 발견했다.


리리와 포포 - [맥] MAC에 GDB 설치하기!



내가 작업한 부분을 정리해서 올린다.


설치방법은 의외로 간단하다.


1004lucifer:~ 1004lucifer$
1004lucifer:~ 1004lucifer$ gdb
-bash: gdb: command not found
1004lucifer:~ 1004lucifer$
1004lucifer:~ 1004lucifer$ brew
-bash: brew: command not found
1004lucifer:~ 1004lucifer$
1004lucifer:~ 1004lucifer$
1004lucifer:~ 1004lucifer$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
==> This script will install:
/usr/local/bin/brew
/usr/local/Library/...
/usr/local/share/man/man1/brew.1

Press RETURN to continue or any other key to abort
==> /usr/bin/sudo /bin/mkdir /usr/local
Password:
==> /usr/bin/sudo /bin/chmod g+rwx /usr/local
==> /usr/bin/sudo /usr/bin/chgrp admin /usr/local
==> /usr/bin/sudo /bin/mkdir /Library/Caches/Homebrew
==> /usr/bin/sudo /bin/chmod g+rwx /Library/Caches/Homebrew
==> Downloading and installing Homebrew...
remote: Counting objects: 213620, done.
remote: Compressing objects: 100% (56570/56570), done.
remote: Total 213620 (delta 155911), reused 213512 (delta 155834)
Receiving objects: 100% (213620/213620), 46.39 MiB | 2.56 MiB/s, done.
Resolving deltas: 100% (155911/155911), done.
From https://github.com/Homebrew/homebrew
* [new branch] master -> origin/master
HEAD is now at e62d8d9 authexec: migrating taps
==> Installation successful!
==> Next steps
Run `brew doctor` before you install anything
Run `brew help` to get started
1004lucifer:~ 1004lucifer$
1004lucifer:~ 1004lucifer$
1004lucifer:~ 1004lucifer$
1004lucifer:~ 1004lucifer$
1004lucifer:~ 1004lucifer$ brew install homebrew/dupes/gdb
Cloning into '/usr/local/Library/Taps/homebrew/homebrew-dupes'...
remote: Counting objects: 1471, done.
remote: Total 1471 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (1471/1471), 292.99 KiB | 69.00 KiB/s, done.
Resolving deltas: 100% (809/809), done.
Checking connectivity... done.
Tapped 36 formulae
==> Installing gdb from homebrew/homebrew-dupes
==> Installing dependencies for gdb: xz, pkg-config, readline
==> Installing gdb dependency: xz
==> Downloading https://downloads.sf.net/project/machomebrew/Bottles/xz-5.0.7.mavericks.bottle.tar.gz
######################################################################## 100.0%
==> Pouring xz-5.0.7.mavericks.bottle.tar.gz
🍺 /usr/local/Cellar/xz/5.0.7: 58 files, 1.5M
==> Installing gdb dependency: pkg-config
==> Downloading https://downloads.sf.net/project/machomebrew/Bottles/pkg-config-0.28.mavericks.bottle.2.tar.gz
######################################################################## 100.0%
==> Pouring pkg-config-0.28.mavericks.bottle.2.tar.gz
🍺 /usr/local/Cellar/pkg-config/0.28: 10 files, 604K
==> Installing gdb dependency: readline
==> Downloading https://downloads.sf.net/project/machomebrew/Bottles/readline-6.3.8.mavericks.bottle.tar.gz
######################################################################## 100.0%
==> Pouring readline-6.3.8.mavericks.bottle.tar.gz
==> Caveats
This formula is keg-only, which means it was not symlinked into /usr/local.

Mac OS X provides similar software, and installing this software in
parallel can cause all kinds of trouble.

OS X provides the BSD libedit library, which shadows libreadline.
In order to prevent conflicts when programs look for libreadline we are
defaulting this GNU Readline installation to keg-only.

Generally there are no consequences of this for you. If you build your
own software and it requires this formula, you'll need to add to your
build variables:

LDFLAGS: -L/usr/local/opt/readline/lib
CPPFLAGS: -I/usr/local/opt/readline/include

==> Summary
🍺 /usr/local/Cellar/readline/6.3.8: 40 files, 2.1M
==> Installing gdb
==> Downloading http://ftpmirror.gnu.org/gdb/gdb-7.8.1.tar.xz
######################################################################## 100.0%
curl: (28) Connection timed out after 5037 milliseconds
Trying a mirror...
==> Downloading http://ftp.gnu.org/gnu/gdb/gdb-7.8.1.tar.xz
######################################################################## 100.0%
==> Patching
patching file gdb/darwin-nat.c
==> ./configure --prefix=/usr/local/Cellar/gdb/7.8.1 --with-system-readline --with-lzma --with-python=/usr
==> make
==> make install
==> Caveats
gdb requires special privileges to access Mach ports.
You will need to codesign the binary. For instructions, see:

http://sourceware.org/gdb/wiki/BuildingOnDarwin
==> Summary
🍺 /usr/local/Cellar/gdb/7.8.1: 42 files, 5.7M, built in 13.2 minutes
1004lucifer:~ 1004lucifer$
1004lucifer:~ 1004lucifer$
1004lucifer:~ 1004lucifer$ gdb
GNU gdb (GDB) 7.8.1
Copyright (C) 2014 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-apple-darwin13.3.0".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
.
Find the GDB manual and other documentation resources online at:
.
For help, type "help".
Type "apropos word" to search for commands related to "word".
(gdb)




gdb 설치 후 run 명령어를 하려면 인증서 작업을 해줘야 한다.




Launchpad 에서 유틸리티/기타 선택 후 '키체인 접근' 아이콘 클릭






키체인 접근 메뉴 => 인증서 지원 => 인증서 생성






다음과 같이 셋팅 (이름은 임의로 지정)






다음과 같이 셋팅





'계속' 버튼을 여러번 누른 후 '인증서에 대한 위치 지정' 항목이 나오면 다음과 같이 셋팅 후 '생성' 버튼 클릭






'완료' 버튼 클릭






키체인 항목에서 '시스템' 선택 후 방금 생성한 키체인의 정보가져오기 선택






'신뢰' 부분에서 '항상 신뢰'를 선택






위의 설정이 되면 인증서 아이콘이 아래와 같이 변경됨.






다음과 같이 명령어 입력 후 재부팅


1004lucifer:~ 1004lucifer$ 
1004lucifer:~ 1004lucifer$ codesign -s gdb-cert /usr/local/bin/gdb
1004lucifer:~ 1004lucifer$ 











PS.
gdb 설치만 하고 인증서 작업을 하지 않은경우 디버깅 시 run 명령 시 다음과 같은 문제가 발생된다.



1004lucifer:~ 1004lucifer$ 
1004lucifer:~ 1004lucifer$ gdb like
GNU gdb (GDB) 7.8.1
Copyright (C) 2014 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-apple-darwin13.3.0".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from like...Reading symbols from /Users/btb/Documents/test/like.dSYM/Contents/Resources/DWARF/like...done.
done.
(gdb) list
3 void lovecall();
4
5 char *getname() {
6 char name[128];
7
8 printf("Input name : ");
9 scanf("%s", name);
10 return name;
11 }
12
(gdb) b main
Breakpoint 1 at 0x100000e0c: file like.c, line 17.
(gdb) r
Starting program: /Users/btb/Documents/test/like 
Unable to find Mach task port for process-id 440: (os/kern) failure (0x5).
 (please check gdb is codesigned - see taskgated(8))
(gdb) 
(gdb)




2014년 11월 21일 금요일

[리뷰][서적] Maven - Sonatype이 만든 Maven 핵심 가이드




Maven : Sonatype이 만든 Maven 핵심 가이드 - 8점
팀 오브라이언 지음, 장선진 옮김/지&선(지앤선)


요즘에는 오픈소스를 다운받으면 대부분 Maven 기반으로 되어있어서 Maven을 공부하지 않으면 오픈소스를 보기 힘든상황이 온것 같다.

최근에는 Gradle 이 더 낫다고 하지만 여젼히 Maven은 사용하는 방법 정도는 알아둬야 다른 사람들의 소스를 보거나 Maven 만 지원하는 서비스를 이용하는데 불편함이 없게 되는듯 하다.


Maven을 학습할 때 이것만큼 자세히 나와있는 책도 없는것 같지만..
책을 보며 하나하나 따라했는데도 정상적으로 작동하지 않는다거나 하는 문제가 있어서 삽질을 좀 했다.

책으로 공부하다가 막히는 부분에 대해서는 블로그에 몇개 정리를 했다.

1. [샘플소스] 'Maven : Sonatype이 만든 Maven 핵심 가이드' 서적의 샘플소스

2. [JAVA] 문제없는 xml파일에서 The processing instruction target matching "[xX][mM][lL]" is not allowed. 에러가 발생할때..

3. [Maven][Java] 컴파일 시 annotations are not supported in -source 1.3 에러가 나는경우..

4. [Maven] Non-resolvable parent POM 에러 발생 문제

5. [Maven] 'groupId' is missing. 에러 발생문제

6. [Maven][Hibernate] Could not get ConfigurationTask 증상 문제


2014년 11월 18일 화요일

[Maven][Hibernate] Could not get ConfigurationTask 증상 문제



HSQLDB 데이터베이스를 생성하기 위해 Hibernate3 플러그인의 hbm2ddl goal 을 호출 시(mvn hibernate3:hbm2ddl) 다음과 같은 오류가 나왔다.


lucifer@lucifer-Vostro-V13:~/test/maven/simple-parent_ch07/simple-webapp$ mvn hibernate3:hbm2ddl
[INFO] Scanning for projects...
[WARNING] 
[WARNING] Some problems were encountered while building the effective model for org.sonatype.mavenbook.ch07:simple-webapp:war:1-SNAPSHOT
[WARNING] 'build.plugins.plugin.version' for org.mortbay.jetty:maven-jetty-plugin is missing. @ line 61, column 15
[WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-compiler-plugin is missing. @ line 53, column 17
[WARNING] 
[WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.
[WARNING] 
[WARNING] For this reason, future Maven versions might no longer support building such malformed projects.
[WARNING] 
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building Chapter 7 Simple Web Application 1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] >>> hibernate3-maven-plugin:2.1:hbm2ddl (default-cli) @ simple-webapp >>>
[INFO] 
[INFO] --- maven-resources-plugin:2.3:resources (default-resources) @ simple-webapp ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO] 
[INFO] <<< hibernate3-maven-plugin:2.1:hbm2ddl (default-cli) @ simple-webapp <<<
[INFO] 
[INFO] --- hibernate3-maven-plugin:2.1:hbm2ddl (default-cli) @ simple-webapp ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.762s
[INFO] Finished at: Tue Nov 18 15:22:27 KST 2014
[INFO] Final Memory: 7M/105M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.codehaus.mojo:hibernate3-maven-plugin:2.1:hbm2ddl (default-cli) on project simple-webapp: Could not get ConfigurationTask. -> [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/MojoExecutionException
lucifer@lucifer-Vostro-V13:~/test/maven/simple-parent_ch07/simple-webapp$





디버그 모드로 실행 시(mvn hibernate3:hbm2ddl -X) 다음과 같이 자세한 정보를 얻을 수 있다.


   ...
   ...

[DEBUG] -- end configuration --
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.440s
[INFO] Finished at: Tue Nov 18 15:19:08 KST 2014
[INFO] Final Memory: 6M/105M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.codehaus.mojo:hibernate3-maven-plugin:2.0:hbm2ddl (default-cli) on project simple-webapp: Could not get ConfigurationTask. -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.codehaus.mojo:hibernate3-maven-plugin:2.0:hbm2ddl (default-cli) on project simple-webapp: Could not get ConfigurationTask.
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:217)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)
at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537)
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:141)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)
Caused by: org.apache.maven.plugin.MojoExecutionException: Could not get ConfigurationTask.
at org.codehaus.mojo.hibernate3.HibernateExporterMojo.getComponentConfiguration(HibernateExporterMojo.java:229)
at org.codehaus.mojo.hibernate3.exporter.Hbm2DDLExporterMojo.doExecute(Hbm2DDLExporterMojo.java:87)
at org.codehaus.mojo.hibernate3.HibernateExporterMojo.execute(HibernateExporterMojo.java:140)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)
... 19 more
[ERROR] 
[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/MojoExecutionException
lucifer@lucifer-Vostro-V13:~/test/maven/simple-parent_ch07/simple-webapp$








http://stackoverflow.com/questions/23270551/maven-by-example-nullpointer-executing-hibernate3hbm2ddl

뭐.. 이유는 잘 모르겠지만 위의 글을 읽고 hibernate3-maven-plugin 의 버전을 2.0 => 2.2 로 변경 후 정상 적으로 되는것을 확인했다.

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.sonatype.mavenbook.ch07</groupId>
    <artifactId>simple-parent</artifactId>
    <version>1-SNAPSHOT</version>
  </parent>

  <artifactId>simple-webapp</artifactId>
  <packaging>war</packaging>
  <name>Chapter 7 Simple Web Application</name>
  <dependencies>
    <dependency>
      <groupId>org.apache.geronimo.specs</groupId>
      <artifactId>geronimo-servlet_2.4_spec</artifactId>
      <version>1.1.1</version>
    </dependency>
    <dependency>
      <groupId>org.sonatype.mavenbook.ch07</groupId>
      <artifactId>simple-weather</artifactId>
      <version>1-SNAPSHOT</version>
    </dependency>
    <dependency>
      <groupId>org.sonatype.mavenbook.ch07</groupId>
      <artifactId>simple-persist</artifactId>
      <version>1-SNAPSHOT</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring</artifactId>
      <version>2.0.7</version>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jstl</artifactId>
      <version>1.1.2</version>
    </dependency>
    <dependency>
      <groupId>taglibs</groupId>
      <artifactId>standard</artifactId>
      <version>1.1.2</version>
    </dependency>
    <dependency>
      <groupId>org.apache.velocity</groupId>
      <artifactId>velocity</artifactId>
      <version>1.5</version>
    </dependency>
  </dependencies>
  <build>
    <finalName>simple-webapp</finalName>
    <plugins>
      <plugin>
        <groupId>org.mortbay.jetty</groupId>
        <artifactId>maven-jetty-plugin</artifactId>
        <dependencies>
          <dependency>
            <groupId>hsqldb</groupId>
            <artifactId>hsqldb</artifactId>
            <version>1.8.0.7</version>
          </dependency>
        </dependencies>
      </plugin>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>hibernate3-maven-plugin</artifactId>
        <version>2.2</version>
        <configuration>
          <components>
            <component>
              <name>hbm2ddl</name>
              <implementation>annotationconfiguration</implementation>
            </component>
          </components>
        </configuration>
        <dependencies>
          <dependency>
            <groupId>hsqldb</groupId>
            <artifactId>hsqldb</artifactId>
            <version>1.8.0.7</version>
          </dependency>
        </dependencies>
      </plugin>
    </plugins>
  </build>
</project>





lucifer@lucifer-Vostro-V13:~/test/maven/simple-parent_ch07/simple-webapp$ mvn hibernate3:hbm2ddl
[INFO] Scanning for projects...
[WARNING] 
[WARNING] Some problems were encountered while building the effective model for org.sonatype.mavenbook.ch07:simple-webapp:war:1-SNAPSHOT
[WARNING] 'build.plugins.plugin.version' for org.mortbay.jetty:maven-jetty-plugin is missing. @ line 61, column 15
[WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-compiler-plugin is missing. @ line 53, column 17
[WARNING] 
[WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.
[WARNING] 
[WARNING] For this reason, future Maven versions might no longer support building such malformed projects.
[WARNING] 
Downloading: http://repo.maven.apache.org/maven2/org/codehaus/mojo/mojo-parent/20/mojo-parent-20.pom
Downloaded: http://repo.maven.apache.org/maven2/org/codehaus/mojo/mojo-parent/20/mojo-parent-20.pom (19 KB at 12.2 KB/sec)
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building Chapter 7 Simple Web Application 1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] >>> hibernate3-maven-plugin:2.2:hbm2ddl (default-cli) @ simple-webapp >>>
[INFO] 
[INFO] --- maven-resources-plugin:2.3:resources (default-resources) @ simple-webapp ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO] 
[INFO] <<< hibernate3-maven-plugin:2.2:hbm2ddl (default-cli) @ simple-webapp <<<
[INFO] 
[INFO] --- hibernate3-maven-plugin:2.2:hbm2ddl (default-cli) @ simple-webapp ---
Downloading: http://repo.maven.apache.org/maven2/org/codehaus/mojo/hibernate3/maven-hibernate3-jdk15/2.2/maven-hibernate3-jdk15-2.2.pom
Downloaded: http://repo.maven.apache.org/maven2/org/codehaus/mojo/hibernate3/maven-hibernate3-jdk15/2.2/maven-hibernate3-jdk15-2.2.pom (3 KB at 5.0 KB/sec)
Downloading: http://repo.maven.apache.org/maven2/org/hibernate/hibernate-entitymanager/3.4.0.GA/hibernate-entitymanager-3.4.0.GA.pom
Downloaded: http://repo.maven.apache.org/maven2/org/hibernate/hibernate-entitymanager/3.4.0.GA/hibernate-entitymanager-3.4.0.GA.pom (2 KB at 4.4 KB/sec)
Downloading: http://repo.maven.apache.org/maven2/org/hibernate/ejb3-persistence/1.0.2.GA/ejb3-persistence-1.0.2.GA.pom
Downloaded: http://repo.maven.apache.org/maven2/org/hibernate/ejb3-persistence/1.0.2.GA/ejb3-persistence-1.0.2.GA.pom (534 B at 1.2 KB/sec)
Downloading: http://repo.maven.apache.org/maven2/org/hibernate/hibernate-commons-annotations/3.1.0.GA/hibernate-commons-annotations-3.1.0.GA.pom
Downloaded: http://repo.maven.apache.org/maven2/org/hibernate/hibernate-commons-annotations/3.1.0.GA/hibernate-commons-annotations-3.1.0.GA.pom (2 KB at 2.5 KB/sec)
Downloading: http://repo.maven.apache.org/maven2/org/hibernate/hibernate-annotations/3.4.0.GA/hibernate-annotations-3.4.0.GA.pom
Downloaded: http://repo.maven.apache.org/maven2/org/hibernate/hibernate-annotations/3.4.0.GA/hibernate-annotations-3.4.0.GA.pom (2 KB at 3.5 KB/sec)
Downloading: http://repo.maven.apache.org/maven2/javax/transaction/jta/1.1/jta-1.1.pom
Downloaded: http://repo.maven.apache.org/maven2/javax/transaction/jta/1.1/jta-1.1.pom (598 B at 1.4 KB/sec)
Downloading: http://repo.maven.apache.org/maven2/javassist/javassist/3.4.GA/javassist-3.4.GA.pom
Downloaded: http://repo.maven.apache.org/maven2/javassist/javassist/3.4.GA/javassist-3.4.GA.pom (485 B at 1.2 KB/sec)
Downloading: http://repo.maven.apache.org/maven2/jboss/jboss-common/4.0.2/jboss-common-4.0.2.pom
Downloaded: http://repo.maven.apache.org/maven2/jboss/jboss-common/4.0.2/jboss-common-4.0.2.pom (915 B at 2.2 KB/sec)
Downloading: http://repo.maven.apache.org/maven2/slide/webdavlib/2.0/webdavlib-2.0.pom
Downloaded: http://repo.maven.apache.org/maven2/slide/webdavlib/2.0/webdavlib-2.0.pom (146 B at 0.4 KB/sec)
Downloading: http://repo.maven.apache.org/maven2/org/hibernate/hibernate-tools/3.2.3.GA/hibernate-tools-3.2.3.GA.jar
Downloading: http://repo.maven.apache.org/maven2/org/hibernate/hibernate-core/3.3.1.GA/hibernate-core-3.3.1.GA.jar
Downloading: http://repo.maven.apache.org/maven2/org/codehaus/mojo/hibernate3/maven-hibernate3-api/2.2/maven-hibernate3-api-2.2.jar
Downloading: http://repo.maven.apache.org/maven2/org/slf4j/slf4j-log4j12/1.5.6/slf4j-log4j12-1.5.6.jar
Downloading: http://repo.maven.apache.org/maven2/org/codehaus/mojo/hibernate3/maven-hibernate3-jdk14/2.2/maven-hibernate3-jdk14-2.2.jar
Downloaded: http://repo.maven.apache.org/maven2/org/codehaus/mojo/hibernate3/maven-hibernate3-jdk14/2.2/maven-hibernate3-jdk14-2.2.jar (7 KB at 10.7 KB/sec)
Downloaded: http://repo.maven.apache.org/maven2/org/slf4j/slf4j-log4j12/1.5.6/slf4j-log4j12-1.5.6.jar (10 KB at 15.5 KB/sec)
Downloading: http://repo.maven.apache.org/maven2/org/codehaus/mojo/hibernate3/maven-hibernate3-jdk15/2.2/maven-hibernate3-jdk15-2.2.jar
Downloading: http://repo.maven.apache.org/maven2/org/hibernate/hibernate-entitymanager/3.4.0.GA/hibernate-entitymanager-3.4.0.GA.jar
Downloaded: http://repo.maven.apache.org/maven2/org/codehaus/mojo/hibernate3/maven-hibernate3-api/2.2/maven-hibernate3-api-2.2.jar (9 KB at 13.1 KB/sec)
Downloading: http://repo.maven.apache.org/maven2/org/hibernate/hibernate-commons-annotations/3.1.0.GA/hibernate-commons-annotations-3.1.0.GA.jar
Downloaded: http://repo.maven.apache.org/maven2/org/codehaus/mojo/hibernate3/maven-hibernate3-jdk15/2.2/maven-hibernate3-jdk15-2.2.jar (9 KB at 21.0 KB/sec)
Downloading: http://repo.maven.apache.org/maven2/javax/transaction/jta/1.1/jta-1.1.jar
Downloaded: http://repo.maven.apache.org/maven2/javax/transaction/jta/1.1/jta-1.1.jar (15 KB at 23.8 KB/sec)
Downloading: http://repo.maven.apache.org/maven2/org/hibernate/ejb3-persistence/1.0.2.GA/ejb3-persistence-1.0.2.GA.jar
Downloaded: http://repo.maven.apache.org/maven2/org/hibernate/hibernate-commons-annotations/3.1.0.GA/hibernate-commons-annotations-3.1.0.GA.jar (66 KB at 62.5 KB/sec)
Downloading: http://repo.maven.apache.org/maven2/org/hibernate/hibernate-annotations/3.4.0.GA/hibernate-annotations-3.4.0.GA.jar
Downloaded: http://repo.maven.apache.org/maven2/org/hibernate/hibernate-tools/3.2.3.GA/hibernate-tools-3.2.3.GA.jar (343 KB at 193.0 KB/sec)
Downloading: http://repo.maven.apache.org/maven2/jboss/jboss-common/4.0.2/jboss-common-4.0.2.jar
Downloaded: http://repo.maven.apache.org/maven2/org/hibernate/hibernate-entitymanager/3.4.0.GA/hibernate-entitymanager-3.4.0.GA.jar (117 KB at 92.9 KB/sec)
Downloading: http://repo.maven.apache.org/maven2/slide/webdavlib/2.0/webdavlib-2.0.jar
Downloaded: http://repo.maven.apache.org/maven2/org/hibernate/ejb3-persistence/1.0.2.GA/ejb3-persistence-1.0.2.GA.jar (50 KB at 55.0 KB/sec)
Downloading: http://repo.maven.apache.org/maven2/javassist/javassist/3.4.GA/javassist-3.4.GA.jar
Downloaded: http://repo.maven.apache.org/maven2/slide/webdavlib/2.0/webdavlib-2.0.jar (129 KB at 124.3 KB/sec)
Downloaded: http://repo.maven.apache.org/maven2/org/hibernate/hibernate-annotations/3.4.0.GA/hibernate-annotations-3.4.0.GA.jar (274 KB at 147.8 KB/sec)
Downloaded: http://repo.maven.apache.org/maven2/jboss/jboss-common/4.0.2/jboss-common-4.0.2.jar (458 KB at 252.5 KB/sec)
Downloaded: http://repo.maven.apache.org/maven2/javassist/javassist/3.4.GA/javassist-3.4.GA.jar (460 KB at 181.6 KB/sec)
Downloaded: http://repo.maven.apache.org/maven2/org/hibernate/hibernate-core/3.3.1.GA/hibernate-core-3.3.1.GA.jar (2223 KB at 399.3 KB/sec)
[INFO] Configuration XML file loaded: jar:file:/home/lucifer/.m2/repository/org/sonatype/mavenbook/ch07/simple-persist/1-SNAPSHOT/simple-persist-1-SNAPSHOT.jar!/hibernate.cfg.xml
15:35:19,110  INFO org.hibernate.cfg.annotations.Version - Hibernate Annotations 3.4.0.GA
15:35:19,166  INFO org.hibernate.cfg.Environment - Hibernate 3.3.1.GA
15:35:19,189  INFO org.hibernate.cfg.Environment - hibernate.properties not found
15:35:19,206  INFO org.hibernate.cfg.Environment - Bytecode provider name : javassist
15:35:19,223  INFO org.hibernate.cfg.Environment - using JDK 1.4 java.sql.Timestamp handling
15:35:19,405  INFO org.hibernate.annotations.common.Version - Hibernate Commons Annotations 3.1.0.GA
[INFO] Configuration XML file loaded: jar:file:/home/lucifer/.m2/repository/org/sonatype/mavenbook/ch07/simple-persist/1-SNAPSHOT/simple-persist-1-SNAPSHOT.jar!/hibernate.cfg.xml
15:35:19,426  INFO org.hibernate.cfg.Configuration - configuring from url: jar:file:/home/lucifer/.m2/repository/org/sonatype/mavenbook/ch07/simple-persist/1-SNAPSHOT/simple-persist-1-SNAPSHOT.jar!/hibernate.cfg.xml
15:35:20,066  INFO org.hibernate.cfg.Configuration - Configured SessionFactory: null
[INFO] No hibernate properties file loaded.
15:35:20,185  INFO org.hibernate.cfg.AnnotationBinder - Binding entity from annotated class: org.sonatype.mavenbook.weather.model.Atmosphere
15:35:20,250  INFO org.hibernate.cfg.annotations.EntityBinder - Bind entity org.sonatype.mavenbook.weather.model.Atmosphere on table Atmosphere
15:35:20,352  INFO org.hibernate.cfg.AnnotationBinder - Binding entity from annotated class: org.sonatype.mavenbook.weather.model.Condition
15:35:20,353  INFO org.hibernate.cfg.annotations.EntityBinder - Bind entity org.sonatype.mavenbook.weather.model.Condition on table Condition
15:35:20,357  INFO org.hibernate.cfg.AnnotationBinder - Binding entity from annotated class: org.sonatype.mavenbook.weather.model.Location
15:35:20,359  INFO org.hibernate.cfg.annotations.QueryBinder - Binding Named query: Location.uniqueByZip => from Location l where l.zip = :zip
15:35:20,359  INFO org.hibernate.cfg.annotations.EntityBinder - Bind entity org.sonatype.mavenbook.weather.model.Location on table Location
15:35:20,361  INFO org.hibernate.cfg.AnnotationBinder - Binding entity from annotated class: org.sonatype.mavenbook.weather.model.Weather
15:35:20,362  INFO org.hibernate.cfg.annotations.QueryBinder - Binding Named query: Weather.byLocation => from Weather w where w.location = :location
15:35:20,362  INFO org.hibernate.cfg.annotations.EntityBinder - Bind entity org.sonatype.mavenbook.weather.model.Weather on table Weather
15:35:20,374  INFO org.hibernate.cfg.AnnotationBinder - Binding entity from annotated class: org.sonatype.mavenbook.weather.model.Wind
15:35:20,375  INFO org.hibernate.cfg.annotations.EntityBinder - Bind entity org.sonatype.mavenbook.weather.model.Wind on table Wind
15:35:20,475  INFO org.hibernate.cfg.AnnotationConfiguration - Hibernate Validator not found: ignoring
15:35:20,511  INFO org.hibernate.dialect.Dialect - Using dialect: org.hibernate.dialect.HSQLDialect
15:35:20,569  INFO org.hibernate.tool.hbm2ddl.SchemaExport - Running hbm2ddl schema export
15:35:20,571  INFO org.hibernate.tool.hbm2ddl.SchemaExport - exporting generated schema to database
15:35:20,576  INFO org.hibernate.connection.DriverManagerConnectionProvider - Using Hibernate built-in connection pool (not for production use!)
15:35:20,577  INFO org.hibernate.connection.DriverManagerConnectionProvider - Hibernate connection pool size: 1
15:35:20,577  INFO org.hibernate.connection.DriverManagerConnectionProvider - autocommit mode: false
15:35:20,591  INFO org.hibernate.connection.DriverManagerConnectionProvider - using driver: org.hsqldb.jdbcDriver at URL: jdbc:hsqldb:data/weather
15:35:20,591  INFO org.hibernate.connection.DriverManagerConnectionProvider - connection properties: {user=sa, password=****, shutdown=true}
create table Atmosphere (id integer generated by default as identity (start with 1), humidity varchar(255), pressure varchar(255), rising varchar(255), visibility varchar(255), weather_id integer not null, primary key (id));
create table Condition (id integer generated by default as identity (start with 1), code varchar(255), date varchar(255), temp varchar(255), text varchar(255), weather_id integer not null, primary key (id));
create table Location (zip varchar(255) not null, city varchar(255), country varchar(255), region varchar(255), primary key (zip));
create table Weather (id integer generated by default as identity (start with 1), date timestamp, location_zip varchar(255), primary key (id));
create table Wind (id integer generated by default as identity (start with 1), chill varchar(255), direction varchar(255), speed varchar(255), weather_id integer not null, primary key (id));
alter table Atmosphere add constraint FK2AF43942E377EE06 foreign key (weather_id) references Weather;
alter table Condition add constraint FK441B8CFBE377EE06 foreign key (weather_id) references Weather;
alter table Weather add constraint FKAC24CFD41D328C00 foreign key (location_zip) references Location;
alter table Wind add constraint FK292428E377EE06 foreign key (weather_id) references Weather;
15:35:21,004  INFO org.hibernate.tool.hbm2ddl.SchemaExport - schema export complete
15:35:21,006  INFO org.hibernate.connection.DriverManagerConnectionProvider - cleaning up connection pool: jdbc:hsqldb:data/weather
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 18.103s
[INFO] Finished at: Tue Nov 18 15:35:21 KST 2014
[INFO] Final Memory: 15M/171M
[INFO] ------------------------------------------------------------------------
lucifer@lucifer-Vostro-V13:~/test/maven/simple-parent_ch07/simple-webapp$ 





mvn 및 JAVA_HOME 같은 정보는 다음과 같다.


lucifer@lucifer-Vostro-V13:~$ mvn -v
Apache Maven 3.0.4
Maven home: /usr/share/maven
Java version: 1.7.0_45, vendor: Oracle Corporation
Java home: /opt/jdk1.7.0_45/jre
Default locale: ko_KR, platform encoding: UTF-8
OS name: "linux", version: "3.11.0-20-generic", arch: "amd64", family: "unix"
lucifer@lucifer-Vostro-V13:~$






Hibernate 써보지도 않았고..
앞으로 쓸일이 있을지도 잘 몰라서..;;
2.2 미만의 버전에는 어떻게 설정을 해야 하는지는 귀찮아서 찾아보지 않았다.





2014년 11월 17일 월요일

[Maven] 'groupId' is missing. 에러 발생문제



mvn install 또는 mvn clean install 할 시 다음과 같이 나온다.


lucifer@lucifer-Vostro-V13:~/test/maven/simple-parent$ mvn clean install
[INFO] Scanning for projects...
[ERROR] The build could not read 1 project -> [Help 1]
[ERROR]   
[ERROR]   The project [unknown-group-id]:simple-parent:1.0 (/home/lucifer/test/maven/simple-parent/pom.xml) has 1 error
[ERROR]     'groupId' is missing. @ line 2, column 99
[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/ProjectBuildingException
lucifer@lucifer-Vostro-V13:~/test/maven/simple-parent$







문제

메이븐 코디네이트의 정보중 groupId 가 빠져 있어서 문제가 되었다.



pom.xml 에는 프로젝트의 유일한 ID와 의존성 또는 메이븐 POM의 플러그인으로 사용할 수 있는 식별자들의 정보인 메이븐 코디네이트가 있어야 한다.

1. 메이븐 코디네이트는 종종 groupId:artifactId:packaging:version 과 같은 형식으로 콜론을 구분자로 사용하여 표기한다.

2. 메이븐 코디네이트는 groupId, artifactId, version, packaging 으로 구성되어 있다.
    (드믈게 classifier 라는 코디네이트를 5번째 코디네이트로 사용한다.)

3. 필수속성(groupId, artifactId, version)
    - packaging 은 jar 가 디폴트






다음과 같이 groupId 를 추가해 줬다.

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <artifactId>simple-parent</artifactId>
  <groupId>org.sonatype.mavenbook.ch06</groupId>
  <packaging>pom</packaging>
  <version>1.0</version>
  <name>Chapter 6 Simple Parent Project</name>
 
  <modules>
    <module>simple-weather</module>
    <module>simple-webapp</module>
  </modules>

  <build>
    <pluginManagement>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>1.5</source>
          <target>1.5</target>
        </configuration>
      </plugin>
    </plugins>
    </pluginManagement>
  </build>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>


[Maven] Non-resolvable parent POM 에러 발생 문제



오류를 보면 어느 라인이 잘못되어있는지 정확히 알려주니 pom.xml 에서 해당 라인을 확인해 보면 된다.



증상 1

mvn install 또는 mvn clean install 할 시 다음과 같이 나온다.


lucifer@lucifer-Vostro-V13:~/test/maven/simple-parent$ mvn clean install
[INFO] Scanning for projects...
[ERROR] The build could not read 1 project -> [Help 1]
[ERROR]   
[ERROR]   The project org.sonatype.mavenbook.ch06:simple-parent:1.0 (/home/lucifer/test/maven/simple-parent/pom.xml) has 1 error
[ERROR]     Non-resolvable parent POM: Could not find artifact org.sonatype.mavenbook.ch06:parent:pom:1-SNAPSHOT and 'parent.relativePath' points at wrong local POM @ line 13, column 11 -> [Help 2]
[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/ProjectBuildingException
[ERROR] [Help 2] http://cwiki.apache.org/confluence/display/MAVEN/UnresolvableModelException
lucifer@lucifer-Vostro-V13:~/test/maven/simple-parent$ 






다중 프로젝트 부분에서 여러개의 pom.xml 이 있는데 해당 pom.xml 이 가장 상위 pom 인데 parent 가 설정되어 있어서 문제가 발생함.

다음 부분을 주석처리함.


<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <artifactId>simple-parent</artifactId>
  <packaging>pom</packaging>
    <version>1.0</version>
  <name>Chapter 6 Simple Parent Project</name>
 
  <modules>
    <module>simple-weather</module>
    <module>simple-webapp</module>
  </modules>
  <parent>
   <artifactId>parent</artifactId>
   <groupId>org.sonatype.mavenbook.ch06</groupId>
   <version>1-SNAPSHOT</version>
  </parent>

  <build>
    <pluginManagement>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>1.5</source>
          <target>1.5</target>
        </configuration>
      </plugin>
    </plugins>
    </pluginManagement>
  </build>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>








증상 2

mvn install 또는 mvn clean install 할 시 다음과 같이 나온다.


lucifer@lucifer-Vostro-V13:~/test/maven/simple-parent$ mvn clean install
[INFO] Scanning for projects...
[ERROR] The build could not read 2 projects -> [Help 1]
[ERROR]   
[ERROR]   The project org.sonatype.mavenbook.ch06:simple-weather:1-SNAPSHOT (/home/lucifer/test/maven/simple-parent/simple-weather/pom.xml) has 1 error
[ERROR]     Non-resolvable parent POM: Could not find artifact org.sonatype.mavenbook.ch06:simple-parent:pom:1-SNAPSHOT and 'parent.relativePath' points at wrong local POM @ line 4, column 11 -> [Help 2]
[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/ProjectBuildingException
[ERROR] [Help 2] http://cwiki.apache.org/confluence/display/MAVEN/UnresolvableModelException
lucifer@lucifer-Vostro-V13:~/test/maven/simple-parent$





다중 프로젝트에서 상위 pom.xml 에서의 version 정보가 하위 pom.xml 에서 지정한 parent version 정보와 달라서 문제가 발생했다.

다음과 같이 버전정보를 똑같이 맞추어 주었다.



상위 pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <artifactId>simple-parent</artifactId>
  <groupId>org.sonatype.mavenbook.ch06</groupId>
  <packaging>pom</packaging>
  <version>1.0</version>
  <name>Chapter 6 Simple Parent Project</name>
 
  <modules>
    <module>simple-weather</module>
    <module>simple-webapp</module>
  </modules>

  <build>
    <pluginManagement>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>1.5</source>
          <target>1.5</target>
        </configuration>
      </plugin>
    </plugins>
    </pluginManagement>
  </build>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>





하위 pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.sonatype.mavenbook.ch06</groupId>
    <artifactId>simple-parent</artifactId>
    <version>1.0</version>
  </parent>

  <artifactId>simple-webapp</artifactId>
  <packaging>war</packaging>
  <name>Chapter 6 Simple Web Application Project</name>
  <dependencies>
    <dependency>
      <groupId>org.apache.geronimo.specs</groupId>
      <artifactId>geronimo-servlet_2.4_spec</artifactId>
      <version>1.1.1</version>
    </dependency>
    <dependency>
      <groupId>org.sonatype.mavenbook.ch06</groupId>
      <artifactId>simple-weather</artifactId>
      <version>${project.version}</version>
    </dependency>
  </dependencies>
  <build>
    <finalName>simple-webapp</finalName>
    <plugins>
      <plugin>
        <groupId>org.mortbay.jetty</groupId>
        <artifactId>maven-jetty-plugin</artifactId>
      </plugin>
    </plugins>
  </build>
</project>