일단 그냥 기록용!

안드로이드로 음악플레이어를 만드려면 안드로이드용 음악 라이브러리에서 데이터를 가져와야합니다. 안드로이드는 자체적으로 Song, Artist, Album, Genre 등의 데이터를 sdcard에서 미디어스캔을 해서 데이터베이스를 구축합니다.
이 구축한 것을 자체적인 sqlite에 저장을 하는데, 이것을 앱에서 불러와서 쓸 수 있습니다. 뭐 Song테이블에서 해당 곡에 대한 경로까지 다 저장하고 있어서 불러와서 데이터를 보여줄 수 있는 그런 앱을 만들 수 있습니다.

간단한 예제로 아티스트 목록을 가져오는 것을......


package com.mudchobo.test.musiclibrarytest;

import java.util.ArrayList;
import java.util.List;

import android.app.ListActivity;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.MediaStore;
import android.widget.ArrayAdapter;

public class MusicLibraryTestActivity extends ListActivity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        List<String> artists = getArtists();
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, artists);
        setListAdapter(adapter);
    }
    
    public List<String> getArtists() {
    	List<String> list = new ArrayList<String>();
		String[] cursorColumns = new String[] {
				MediaStore.Audio.Artists._ID,
				MediaStore.Audio.Artists.ARTIST
		};
		Cursor cursor = (Cursor) getContentResolver().query(
				MediaStore.Audio.Artists.EXTERNAL_CONTENT_URI,
				cursorColumns, null, null, null);
		
		if (cursor == null) {
			return list;
		}
		if (cursor.moveToFirst()) {
			int idColumn = cursor.getColumnIndex(MediaStore.Audio.Artists._ID);
			int artistColumn = cursor.getColumnIndex(MediaStore.Audio.Artists.ARTIST);
			do
			{
				String artist = cursor.getString(artistColumn);
				list.add(artist);
			} while (cursor.moveToNext());
		}
		cursor.close();
		return list;
    }
}



아 귀차나서...초간단 소스를......
getArtists함수를 주목해서.....
getContentResolver().query()함수를 보면 그냥 저 테이블에서 쿼리를 날려서 cursor를 얻어옵니다.
cursor를 돌려가면서 값을 가져오면 아티스트명을 가져오게 됩니다.
그리고 이 아티스트테이블에 보면 칼럼이 4개가 있습니다. 아래사이트에 확인!
http://developer.android.com/reference/android/provider/MediaStore.Audio.ArtistColumns.html
이런 식으로 해서 가져오는데, 막상 보면 sqlite로 쿼리날리는 것과 같습니다. 직접 쿼리를 날려도 가져올 수 있구요^^

그 외의 Song테이블이라던지, Album테이블, Playlist테이블 같은 것도 위와 같은 방법으로 다 가져오고, 삽입하는 것도 가능합니다.
플레이리스트는 MediaStore.Audio.Playlists 이곳 테이블에 insert하면 되고~
이건 플레이르스트 곡목록 관련된 것들 MediaStore.Audio.Playlists.Members
앨범은 MediaStore.Audio.Albums
곡은 MediaStore.Audio.Media
장르는 MediaStore.Audio.Genres
등등~

PS. 근데, 이거 테이블 구조 같은 것을 잘 정리한 곳이 왜 없죠?-_- 내가 못찾는 건가... 안드로이드 사이트 가도 없는 것 같은데....
 
Posted by 머드초보
,
 
전 IT를 너무 좋아해서 이런 IT 스토리나 얘기가 재미있네요~
예전에 안철수가 쓴 책과 빌게이츠관련된 책도 어렸을 때(?) 잼나게 읽었던 기억이 나네요...
그리고 "실리콘 벨리 전쟁"이라는 영화도 있는데, 이 영화도 굉장히 재미있게 본 것 같아요. 이 영화는 마이크로소프트와 애플이 실리콘벨리에서 어떤 식으로 경쟁을 해왔는지에 대해서 나오는 영화인데, 1999년 영화라서 이 당시에는 빌게이츠가 마치 스티브잡스를 이긴듯한 영화를 그린 형태입니다. 하지만, 10년 뒤인 지금은 애플이 세상을 바꾸려고 하고 있죠! 그리고 이 영화는 뭐 그리 썩 잘만든 영화는 아니였지만, 이런 얘기를 담은 것 자체가 매우 흥미로웠죠...

영화 소셜네트워크를 보게 되었는데요. 이 영화를 보게 되면 페이스북이 탄생한 배경과 그 탄생과정에서 겪는 소송(?) 스토리를 얘기해주는데요. 영화를 보면서 이런 일이 있었구나~ 하면서 넘어가기에는 다른 내용들이 너무 궁금했고, 또한 영화에서는 항상 픽션이 존재하고, 사실을 기반으로 하지만 일부 영화화를 위해 과장된 내용이 있을 것이라고 생각했습니다.
그런 생각이 드는 와중에 "페이스북 이펙트"라는 페이스북의 인사이드 스토리를 담은 책이 출간된다는 얘기를 들었습니다. 그래서 출판과 동시에 구입을.....

사용자 삽입 이미지

재미있게 영화와 책을 비교한 글도 있네요~
http://blog.daum.net/7237474/8739840

이 책의 내용은 말그대로 페이스북 효과입니다. 페이스북이 어떤 방식으로 성장을 하면서 대체 사회에 어떤 영향을 끼치고 있으며 페이스북이 지금까지 어떤 짓(?)을 해왔는가, 앞으로 페이스북은 어떤 것을 꿈꾸고 있는가에 대해서 기록한 책입니다.

일단 처음에는 역시나 페이스북이 탄생하게 된 스토리를 주로 다룹니다. 영화 소셜네트워크에서 나온 일부스토리를 풀스토리로 볼 수 있습니다.

중반부에는 투자관련 얘기가 주로 나오게 되는데, 굉장히 많은 회사들이 페이스북을 사려고 했다는 것이 매우 흥미롭네요. 근데, 그런 거대한 금액이 유혹하는데 안 팔 수 있다는 것 자체가 대인배... 게다가 마크 주커버그와 그의 일당들은 협상의 달인 같은....-_-

또한 sns에서 꼭 빠지지 않는 개인정보 문제도...

플랫폼 관련 얘기가 나오는데, 저는 이 부분을 매우 유심히 봤습니다. 확실히 페이스북은 MS의 윈도우나 애플의 맥OS, 안드로이드, iOS 등의 플랫폼과는 다른 웹서비스입니다. 하지만, 이것을 플랫폼이라고 정의한 마크 주커버그가 너무 위대하게 느껴지네요... 그래서 다른 측면에서 보면 저들과 같은 플랫폼이 되는 것이죠.

마지막으로 마크 주커버그가 항상 강조하는 것은 수익보단 성장을 우선 시 한다는 것입니다. 이런 마크주커버그의 생각이 페이스북을 여기까지 이끌지 않았나 싶네요.
그리고 많은 분들이 마크주커버그는 후루꾸가 터져서 페이스북을 이렇게 성장시킨 것이다 라는 생각을 많이 하는데, 이 책을 보시면 생각이 좀 달라질꺼에요~ 운만 가지고 이렇게 성장할 수 없었고, 마크주커버그는 미래에 대해서 어느정도 예측하고, 사람들이 어떤 것을 원하는지 잘 알고 있었던 인물이 아니였나 생각해봅니다...

PS. 개발관련얘기 별로 없으니 IT좋아하시는 분들 보세요~ 잼있어요~!
 
Posted by 머드초보
,
 
안드로이드에는 음악앱이 엄청 많아요!

Android에서 음악 데이터베이스를 오픈했기 때문에 미디어스캔을 거쳐서 안드로이드db에 앨범, 곡, 아티스트별 db를 자동으로 생성하게 되어서 이걸 안드로이드 개발자가 앱을 개발하면서 접근할 수 있으며, 음악플레이도 쉽게 할 수 있어서 누구나 음악앱을 만들 수 있죠.

음악앱의 관건은 역시 사용자가 편리하게 음악을 들을 수 있는 것과 비주얼적인 요소와 부가적인(가사나 이퀄라이저, 소셜 정도?) 기능이 얼마나 잘 되어있는지로 판단할 수 있겠죠^^

그래서 한번 비교해봤어요~

1. PowerAMP Music Player Beta (현재까진 무료)
아직 베타라서 그런지 무료입니다. 셋팅메뉴에 buy메뉴가 있는걸보니, 나중에 유료로 팔 모양입니다 ㄷㄷ
파워앰프의 장점은 멋진 UI입니다. 하지만 이런 ui말고도 이퀄라이저도 완벽히 제공합니다.
사용자 삽입 이미지

멋진 플레이어UI! 오른쪽은 이퀄라이저 조절!


다른 플레이어는 폴더재생기능이 조금 부족한데, 이 파워앰프는 폴더재생과 라이브러리재생 두가지모드가 모두 존재합니다.
게다가 락화면모드까지 제공을 해서 현재 안드로이드카페에서 가장 인기있는 플레이어로 자리잡았네요!
또 앨범아트가 없으면 자동으로 받아주는 기능도 있는 것 같습니다. 전 앨범아트가 다 있는 MP3를 받아서 뭐 필요 없는 기능이지만^^

사용자 삽입 이미지

폴더재생과 라이브러리재생 제공! 락화면 제공!


한가지 단점이 있다면 역시나 가사-_- MP3 파일안에 있는 가사를 보여주는 기능이라도 있었으면 좋겠는데, 없네요.
디자인:★★★★★ 아오 디자인 만점! 제가 원했던 디자인ㅠㅠ
UI:★★★★ 폴더랑 라이브러리랑 합치기 힘든 형태인데, UI적으로 잘 구현한 것 가틈! 하지만 버튼이 너무 많아서 좀 복잡하긴 함ㅠㅠ
부가기능:★★★ 락스크린은 맘에 들었지만, 가사 때문에 별두개 깜 ㅇㅇ

2. tunewiki (광고버전은 무료, 비광고버전은 유료)

소셜의 기능을 넣은 음악플레이어 ㄷㄷ
일단 폴더재생은 안되구요-_- 그리고 광고가 있습니다.
일반적인 라이브러리재생을 지원합니다.
튠위키의 장점은 엄청난 부가기능이죠. 오히려 플레이어기능은 그지같아도 부가기능하난 최고입니다.

첫번째로 가사재생됩니다. 하지만.. 제목으로 그냥 검색해버리나봅니다. 그래서 가사가 가끔 안맞을 때가 있습니다. 알송은 md5로 검색하는데ㅠㅠ 그리고 외국에서 서비스하는거라 한국노래 가사는 거의 없습니다. 뭐 좀 맘에 안들지만 나름 싱크가사네요^^

두번째론 뮤직맵을 제공합니다. 현재 지도에서 이런 음악을 지역에서 듣고 있다는 것을 보여주는 것이죠. 이건 정말 맘에 드네요~ 게다가 듣고 있는 음악에 대해 유튜브검색을 제공해서 바로 어떤 음악인지 확인할 수 있어요~

세번째론 이 플레이어로 들은 탑50 아티스트 및 곡을 볼 수 있다는 것이죠. 나라별로 차트가 존재해서 현재 우리나라에서 뭐가 대세인지 확실히 보여주네요^^ 게다가 클릭하면 동영상으로 음악을 재생할 수 있어요. 완전 최고네요.

네번째는 트위터나 페이스북 공유할 수 있는건데, 그냥 제목과 아티스트명만 공유하는 거니 뭐 별로 좋은 기능은 아닌 듯. 와 부가기능 많네...

사용자 삽입 이미지

가사나오긴 하는데, 없는게 더많음 ㅇㅇ, 오른쪽은 나라별로 순위에서 본 순위목록!



사용자 삽입 이미지

뮤직맵입니다. 에코브릿지 노래를 누군가 듣고 있는데, 이노래가 궁금하면 바로 유튜브검색으로 확인할 수 있어요~


디자인:★ 디자인 따윈 하지 않은 앱입니다-_-
UI: ★★ 부가기능이 많아서 그런지 UI가 엄청 불편합니다-_- 그래도 나름 많은 기능을 쉽게 해보려고 애를 쓴 흔적이 보이지만, 뭘 찾으려고 해도 참 어렵습니다ㅠ
부가기능: ★★★★★ 부가기능은 그냥 짱먹습니다! 심심할 때 음악에 대한 정보나 사람들은 어떤 음악을 듣는지에 대해서 한번에 확인할 수 있어서 좋습니다~


3. Winamp Beta (무료)
역사가 13년이나 된 Winamp가 안드로이드용으로도 나왔습니다.
폴더재생안되고, 가사안되고, 부가기능도 없고, 아무것도 안됨. 그냥 플레이어임 ㅇㅇ
근데, Wifi를 이용해서 pc와 싱크를 맞추는 기능이 있는 것 같습니다. 근데 제가 아무리 삽질해봐도 안되네요...ㅠㅠ Winamp 5.59beta버전 깔면 된다고 하는데, Device에서 안뜨네요ㅠㅠ
USB로도 된다고 해서 별짓을 다해봤는데 안되네요ㅠㅠ
암튼 이런 싱크기능이 있으면 회사나 집이나 이동이 많은 사람들에게 어디서나 같은 음악을 들을 수 있는 장점이 있겠네요~^^

암튼, 그런 부가기능이 하나있고, 락화면일 제공합니다. 락화면은 좌측상단에 락풀면 또 원래 락화면이 나오네요. 그냥 다 풀리게 해주지-_-
사용자 삽입 이미지

그냥 평범한 플레이어... 우측은 락화면


디자인: ★★ 그냥 무난한 디자인임 ㅇㅇ
UI: ★★★ 두개주려다가 좀 맘에 드는게 다른 플레이어에 볼 수 없는 아코디언형태의 UI가 있음. 저기 home을 누르면 라이브러리가 보이고 아래는 플레이어형태! 하지만 별로 유용해보이진 않음.
부가기능:★★★ 락화면이랑 wifi싱크로 세개줌.

4. Music PlayerPro (유료)
기본 음악앱이랑 비슷한데, 거기에 여러가지 기능을 더 추가해서 유료로 팔고 있는 앱입니다.
음악플레이어 형태는 비슷한데, 거기에 폴더재생기능을 추가했습니다.
그리고 부가기능으로는 가사와 앨범정보, 앨범아트들을 받을 수 있게 되어있습니다. 근데 잘 안되네요-_-
락화면을 제공합니다.
공유기능을 제공하는데, 앨범아트를 공유하면 트위터를 통해 공유할 수 있습니다. 음원을 공유하고 싶으면 email이나 블루투스를 통해 공유가 가능합니다.
사용자 삽입 이미지

큼직한 앨범아트가 맘에드네요! 플레이어화면은 그냥 일반적인 플레이어화면

사용자 삽입 이미지

현재 재생중인 음악에 대해 가사 및 앨범정보 앨범아트를 가져올 수 있고, 해당곡의 앨범아트를 트위터로 공유할 수 있고, 오디오파일을 쉽게 공유할 수 있다-_-


디자인: ★★★ 무난함 ㅇㅇ
UI: ★★★ 무난함 ㅇㅇ
부가기능: ★★★ 무난함 ㅇㅇ
그냥 무난한 플레이어임-_-


휴.... 개인적으로 PowerAMP의 UI와 디자인의 Tunewiki의 부가기능을 합친 쉽고 좋은 ui플레이어가 나왔으면 좋겠네요ㅠㅠ
 
Posted by 머드초보
,
 
아주 간단한 날씨앱을 만들어봤는데, urlLoader가 잘 작동하는지 테스트해봤습니다^^

Flash로 개발하게 되었을 때 이점은 역시나 플래시만의 장점인 쉽게 그래픽을 그리고, 조작할 수 있다는 것이겠죠^^ 게임개발에 유용한...ㄷㄷ
게다가 이번에 안드로이드air까지 지원하면서 한가지의 코드로 데스크탑, 안드로이드, 아이폰앱까지 만들 수 있는 형태가 될 수 있죠(사실 Android와 Desktop은 하나의 프로젝트긴 한데, 아이폰은 AIR프로젝트가 아닌 아이폰OS프로젝트로 생성해야 만들 수 있긴하죠ㅠ).
그리고, iPhone개발을 위해 값비싼 맥북을 사지 않아도 되지요-_-(하지만, 역시....그냥 xcode로 개발하는 게...)
하지만, 모바일 기기 특성상 각각 장단점을 살릴 수 있는 기능들은 일부제한이 됩니다. 그런 기능들을 다 포기한다면 그나마 할 수 있는 분야는 게임분야겠네요^^ 게임분야는 제작하면 좋을 듯 하지만, 또 여기서 퍼포먼스가 좀 걸리네요. 제가 bitmap을 통해 뭔가 그리기 테스트를 해봤는데, 역시나 뭔가 좀 느린 듯한 느낌을 떨쳐버릴 순 없군요ㅠㅠ

일단 뭐 간단한 URLLoader를 이용해 데이터 뿌려주는 것부터 해봤긔...ㅠㅠ

일단 Adobe에서 제공하는 문서에 보면 엄청 잘나와있습니다^^
http://help.adobe.com/ko_KR/as3/iphone/index.html

준비물은 Flash CS5 랑 인증서생성 해주고 발급해주는 OpenSSL만 있으면 될 듯!

1. 인증서발급 및 프로비저닝 프로파일 받기
맥에서는 KeyChain Access라는 프로그램으로 막 만들면 되는데, 윈도우즈에서는 그게 없어요. 그래서 하는 방법이 어도비공식문서 잘 나와있네요~ 여기에서는 윈도우즈에서도 할 수 있는 방법이 있으니까 참조하세요~
http://help.adobe.com/ko_KR/as3/iphone/WS789ea67d3e73a8b2-240138de1243a7725e7-7ffd.html
혹시나.... 99딸라짜리 개발자등록을 안하셨다면 할 수 없습니다ㅠㅠ
근데, 제 아이팟은 탈옥을 해서 그런지, 안드로이드용 .p12파일과 아무 .mobileprovision파일로 해도 잘되더라구요. 기기에 그냥 테스트가 하고 싶으신 분이라면(제가 그랬음!기기에 어떻게 돌아가는지만 궁금했을 뿐), 탈옥(?)을 하셔서 테스트를 해보시는게...ㅠㅠ

2. Flash CS5에서 개발하기

Flash CS5를 열고 그냥 개발하면 됩니다(응?).
일단 새로만들기에 iPhone OS라는 게 있는데, 그걸로 생성하면 320x480사이즈의 플래시문서형태가 나옵니다. 일단 초간단한 구글날씨api를 이용해서 날씨를 불러와서 문서에 보여주는 형태의 코드를 해봤습니다.
[code]
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.events.Event;
import flash.events.IOErrorEvent;
import flash.errors.IOError;
import flash.utils.Timer;
import flash.events.TimerEvent;

var urlLoader:URLLoader;
var urlRequest:URLRequest;
var timer:Timer;

function init():void
{
    trace("init");   
   
    timer = new Timer(5000, 0);
    timer.addEventListener(TimerEvent.TIMER, timerHandler);
   
    urlLoader = new URLLoader();
    urlLoader.addEventListener(Event.COMPLETE, completeHandler);
    urlLoader.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);
   
    requestWeather();
}

function timerHandler(event:TimerEvent):void
{
    requestWeather();
}

function requestWeather():void
{
    urlRequest = new URLRequest("http://www.google.co.kr/ig/api?weather=seoul&temp=" + Math.random());
    urlLoader.load(urlRequest);
    timer.reset();
    timer.start();
}

function completeHandler(event:Event):void
{
    var xml:XML = new XML(urlLoader.data);
    trace(xml);
    var currentConditions:XMLList = xml.weather.current_conditions;
    var condition:String = currentConditions.condition.@data;
    var tempC:int = currentConditions.temp_c.@data;
    var humidity:String = currentConditions.humidity.@data;
    var weatherIcon:String = currentConditions.icon.@data;
    var windCondition:String = currentConditions.wind_condition.@data;
    trace(tempC + " " + humidity + " " + weatherIcon + " " + windCondition);
   
    imageLoader.source = "http://www.google.co.kr" + weatherIcon;
    labelTemp.text = tempC + "도";
    labelCondition.text = condition;
    labelWind.text = windCondition;
}

function errorHandler(event:IOErrorEvent):void
{
    trace("error = " + event.text);
    labelCondition.text = "오류발생!";
}

init();[/code]
아오....오늘 하루종일 어둡더니 계속 안개네요... 13일의 금요일이 보통 이런 날씨인데...
사용자 삽입 이미지

잘보면 아이콘이 어도비 에어입니다. 뭐 serversocket도 된다니 air가 맞겠네요^^

3. iPhone용에 넣기위해 ipa파일로 제작하기
파일 -> iPhone OS 설정 에서 보면 셋팅하는 게 있고, 배포탭을 보면 인증서와 프로비저닝 프로파일이 있는데, 그건 아까 1번에서 설명한 대로 넣으면 됩니다.
장치 테스트용 빠른 제작으로 하고 제작을 누르면 ipa를 만들기 시작합니다... ipa 생성까지 백만년 걸리는 것 같았습니다ㅠㅠ 엄청 느립니다ㅠㅠ

ipa파일이 해당 프로젝트 폴더에 생성이 되면 그걸 itunes에 있는 응용프로그램에 넣고, 동기화 시키면 아이폰/아이팟에 들어가 있을겁니다.

4. 아이폰/아이팟에서 확인
사용자 삽입 이미지
아오...나 레티나액정인데, 고화질로는 못만드는건가....ㅠㅠ 그냥 흐리게 나오네요ㅠㅠ

5. 후기의 한말씀-_-
그냥 맥북사시고, objective-c배우세요.

 
Posted by 머드초보
,
 
여기저기 메이븐이 많이 쓰이는 것 같아 이참에 삽질을 해봤습니다.
Maven은 소프트웨어 프로젝트 관리툴인데, 의존적인 라이브러리를 서버와 연동해서 쉽게 업데이트를 해주며, 컴파일 및 배포 과정을 최소화하며 자동으로 테스트를 할 수 있게 도와주는 뭐 그런 툴인 듯 합니다.

한마디로 나름 그냥 편하려고 만든거라는거-_-

라이브러리를 수동으로 복사해서 lib폴더에 쳐넣는 행위를 막고 자동으로 라이브러리를 업데이트할 수 있게 해주는 것만해도 큰 장점인 것 같습니다.

1. Maven 다운로드 및 설치
http://maven.apache.org/download.html 여기서 최신버전인 3.0을 받아서 압축해제
환경변수 Path에 maven디렉토리/bin폴더를 걸어두셔야 어디서든 mvn을 때릴 수 있기에 추가!
환경변수 MAVEN_HOME을 maven디렉토리홈으로 해서 추가!

2. m2eclipse설치
이건 이클립스에서 maven템플릿파일을 쉽게 생성할 수 있는 플러그인입니다.
eclipse에서 Help -> Install New Software -> Add해서 url을 http://m2eclipse.sonatype.org/sites/m2e/ 로 한다음에 Maven Integration for eclipse를 체크하고 설치하면 됩니다 ㄷㄷ

3. Mavan프로젝트 생성
이제 Maven프로젝트 생성을 합니다.
New -> Project 하면 Maven Project가 새로 생겼음.
선택하고, location에서 디폴트로하고 Next하고, 우린 webapp을 만들꺼니까 groupid가 org.apache.maven.archetypes이고, Artifact Id가 maven-archetype-webapp을 선택하고 Next!
Group Id는 패키지명으로 대충 com.mudchobo.springtest라고 하고,
Artifact Id는 프로젝트 이름이니까 대충 SpringTest로....-_-

그리고 이제 cmd쳐서 콘솔로가서 SpringTest폴더로 이동. 아래 커맨드발동!
[code]mvn -Dwtpversion=2.0 eclipse:eclipse[/code]
그러면 wtp용 프로젝트로 변환이 되어있을겁니다.
그리고 이상하게 Java Compiler가 1.4로 맞춰져있는데, 1.6으로 맞춥니다.
프로젝트Properties에서 Java Compiler에서ㅓ 1.6으로 맞추고, 아래 Use default compliance setting체크해주시면 됨 ㅇㅇ
그리고 Project Facets에서 Java를 6.0으로 바꿔주시면 됨 ㅇㅇ

4. 의존성 라이브러리 추가
pom.xml
[code]<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>
  <groupId>com.mudchobo.springtest</groupId>
  <artifactId>SpringTest</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>SpringTest Maven Webapp</name>
  <properties>
      <spring.version>3.0.5.RELEASE</spring.version>
  </properties>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-webmvc</artifactId>
          <version>${spring.version}</version>
    </dependency>
    <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-web</artifactId>
          <version>${spring.version}</version>
    </dependency>
  </dependencies>
  <build>
    <finalName>SpringTest</finalName>
  </build>
</project>
[/code]
스프링 라이브러리 2개를 추가했습니다. 그러면 뭔가 웹에서 다운받으면서 라이브러리를 저장소에 저장해둡니다 ㄷㄷ 뭔가 알아서 처리하는 느낌!

5. 이제 스프링라이브러리를 쓰도록 web.xml수정 및 spring-servlet.xml추가!
web.xml
[code]<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
        http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

    <display-name>Court Reservation System</display-name>

    <servlet>
        <servlet-name>spring</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>spring</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>
[/code]
spring-servlet.xml
[code]<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
</beans>[/code]

6. Maven Dependencies 라이브러리 추가.

그냥 실행하게 되면 메이븐에서 읽어드린 라이브러리가 추가되지 않아 Eclipse에 있는 Server에 SpringTest프로젝트를 추가하면 ClassNotFoundException에러가 납니다.
[code]심각: Error loading WebappClassLoader
  context: /SpringTest
  delegate: false
  repositories:
----------> Parent Classloader:
org.apache.catalina.loader.StandardClassLoader@1172e08
 org.springframework.web.servlet.DispatcherServlet
java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet[/code]
그래서 저도 뭔가 라이브러리를 추가해야된다는 생각에 구글링을 해보니 방법이 있군요!

해당 프로젝트폴더에 .setting폴더에 있는 org.eclipse.wst.common.component파일
org.eclipse.wst.common.component
[code]<wb-resource deploy-path="/WEB-INF/classes" source-path="/src/test/java" />
<wb-resource deploy-path="/WEB-INF/classes" source-path="/src/test/resources" />[/code]위에 두줄 지우고,
[code]<dependent-module deploy-path="/WEB-INF/lib">
    <dependency-type>uses</dependency-type>
</dependent-module>[/code]3줄추가하고~

그리고 .classpath파일에 아래 클래스패스를 추가합니다.
.classpath
[code]<classpathentry exported="true" kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER">
    <attributes>
        <attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
    </attributes>
</classpathentry>[/code]
그러면 프로젝트properties에서 Java Build Path에서 Library를 보면 Maven Dependencies가 추가되어있을겁니다~ 여기에는 pom.xml에서 라이브러리 추가한 것이 들어있어요~

이제 Server에 추가한다메 시작하면 톰캣 에러없이 동작할겁니다.

7. war파일 만들기~
프로젝트에 Export해도 되고, mvn으로 명령어를 때려도 됩니다.
[code]mvn package[/code] 때리면 packaging이 war로 되어있어서 war파일이 생성되더군요.
물론 이과정에서 ftp에 배포라던지 그런게 가능한 것 같습니다. 좀 더 연구해보고!

PS. 갑자기 느끼는 생각인데, 이것보다 더 간편한 방법이 있지 않을까 싶기도하고....-_- 후.....

참고자료
http://blog.v-s-f.co.uk/2010/09/jsf-2-1-project-using-eclipse-and-maven-2/
http://maven.apache.org/plugins/maven-eclipse-plugin/

 
Posted by 머드초보
,