BLOG ARTICLE 컴파일 | 1 ARTICLE FOUND

  1. 2008/06/27 이클립스로 루씬 소스 다루기 (2)


사용자 삽입 이미지


요즘 자바 매력에 푹 빠져있다. 아니 이클립스란 괴물의 매력에 빠져 있다는 것이 더 옳을 것 같다. 2주 정도 만지작거린 도구지만 지금까지 보아왔던 개발도구 중에 단연 으뜸인 것 같다. 있을 것 같다고 생각하면 진짜 그런 기능이 있는 소프트웨어가 좋은 소프트웨어라고 생각하는데 이 이클립스가 그렇다.

요즘 회사에서 이클립스를 가지고 파일럿 코딩을 하고 있다. 이에 부스팅받아 생계터전인 검색바닥도 다질겸 소스 배포판을 다운받아 이클립스 작업공간에 가져다 놓고 테스트 프로그램도 작성해보고 내부코드도 수정해가면서 배울려고 했는데 각자는 환상인데 궁합을 맞추려니 쉽지 않았다. 구글링을 해보아도 이클립스에 루씬소스를 올리고 컴파일하는 방법에 대해 나와 있지 않아 약간의 삽질 경험을 공유하려 한다. 루씬, 이클립스 둘다 초짜인데 눈 대중으로 작업한 결과다.

  1. 먼저 루씬 소스를 다운받아 원하는 폴더에 푼다. 이클립스가 소스를 Import하면 복사하기 때문에 아무 곳에 풀면 된다.
  2. 이클립스 File > New > Java Project 메뉴로 Jar 컴파일용 프로젝트(예, LuceneSource)를 만든다. 새로운 프로젝트가 만들어지면 이클립스는 자동으로 src란 폴더를 만든다. 이 폴더에 적절히 루씬 코드를 import해야 한다.
  3. 이클립스 File > Import 메뉴로 루씬소스의 특정 폴더를 읽어 들인다. 루씬 폴더를 무작정 import하면 namespace를 찾을 수 없어 이클립스의 친절한 빨간불들을 보게 된다. Import 메뉴를 클릭해서 나온 마법사에서 Import Source로 File System을 선택하고 Next를 클릭한다. 다음에 나타나는 마법사의 From Directory Browse 버튼을 클릭해서 루씬소스 코드의 lucene-2.3.2/src/java 폴더를 클릭해서 읽어 들인다. 아래 화면과 같이 설정되어야 한다. Import할 소스를 java > org > apache > lucene 순으로 선택하지말고 lucene를 직접 클릭해야 한다. 무슨 차이가 있는지는 모르겠다.
    사용자 삽입 이미지
  4. 이클립스 File > Export 메뉴로 Jar 파일을 특정 폴더에 lucene.jar 파일을 생성한다.
  5. 이클립스 File > New > Java Project 메뉴로 테스트용 프로젝트(예, LuceneStudy)를 만든다.
  6. 테스트 프로젝트의 Build Path > Add External Archives... 메뉴를 이용해 소스 프로젝트에서 생성했던 lucene.jar 파일을 찾아 선택한다.
  7. 테스트 프로젝트에 루씬 기능을 테스트할 Java Class를 만들고 실행해본다. 잘 동작하면 제대로 설정한 것이다.

위 7 단계를 통과하고 생성된 프로젝트 모습은 아래 그림과 같아야 한다. 루씬 소스 배포판에는 루씬 Jar 라이브러리를 위한 소스 폴더(src/java/)가 있고 테스트, 데모, 기타 폴더들이 있다. 루씬 Jar 라이브러리에는 소스 폴더만 필요하다. 이런 점 때문에 루씬 Jar 라이브러리 생성용 프로젝트와는 별도로 테스트 코드를 위한 프로젝트도 만들었다. 한 프로젝트 안에 넣으면 루씬 내부 코드와 테스트 코드를 동시에 수정하면서 작업이 가능하기 때문에 더 좋을 것 같다. 이 정도만 해도 디버깅을 할 때 루씬 내부코드까지 보면서 할 수 있으니 툴 삽질은 여기까지만 한다.

사용자 삽입 이미지
이클립스로 루씬 소스를 분석할 환경을 마련했다. 분석환경이 잘 도는지 확인도 할 겸 LuceneStudy 프로젝트에 StandardAnalyzer 기능을 테스트하는 Analyzer.java를 만들어 넣어보자. 아래와 같은 코드를 넣고 실행해보라.

GeSHi © 2004, Nigel McNie
  1. public class Analyzer {
  2.   public static void main(String[] args) {
  3.     StringReader reader = new StringReader(new String(
  4.         "jongwanyun@gmail.com 메일주소"));
  5.  
  6.     StandardAnalyzer analyzer = new StandardAnalyzer();
  7.     TokenStream tokens = analyzer.tokenStream(new String("email"), reader);
  8.     Token token = new Token();
  9.     try {
  10.       int tokenId = 0;
  11.       while ((token = tokens.next()) != null) {
  12.         StringBuffer out = new StringBuffer();
  13.         out.append(tokenId++);
  14.         out.append("\tToken: [");
  15.         out.append(token.termBuffer());
  16.         out.append("]\t");
  17.         out.append("Type/start/end/length: [");
  18.         out.append(token.type());
  19.         out.append(",");
  20.         out.append(token.startOffset());
  21.         out.append(",");
  22.         out.append(token.endOffset());
  23.         out.append(",");
  24.         out.append(token.termLength());
  25.         out.append("]");
  26.         System.out.println(out.toString());
  27.       }
  28.     } catch (IOException e) {
  29.       e.printStackTrace();
  30.     }
  31.   }
  32. }



@webJOY