[Maven] PluginManagement

Maven 2012.11.14 16:30

PluginManagement에 대한 글..


crescent_util에서 m2 이클립스 플러그인으로 빌드시에

오류가 난다는 이슈가 들어와서 찾아보던 중.... 


일단, 오류자체는 이클립스 플러그인의 버그인듯하고..

아래 내용을 참고하였음..


http://stackoverflow.com/questions/10483180/maven-what-is-pluginmanagement

http://stackoverflow.com/questions/1266226/maven2-problem-with-pluginmanagement-and-parent-child-relationship


You use pluginManagement in a parent pom to configure it in case any child pom wants to use it, but not every child plugin wants to use it. An example can be that your super pom defines some options for the maven Javadoc plugin. Not each child pom might want to use Javadoc, so you define those defaults in a pluginManagement section. The child pom that wants to use the Javadoc plugin, just defines a plugin section and will inherit the configuration from the pluginManagement definition in the parent pom.


Adding the plugin configuration to pluginManagement means that this configuration will be used if the plugin is declared, but you still need to declare the plugin in the build section of any POM that wants to use it.


However, this only configures plugins that are actually referenced within the plugins element in the children


상위 pom에서 pluginManagement로 선언한것은 다만 상속해서 사용하고 싶은 

하위 pom에서 별다른 버전 설정없이도 사용 할 수 있도록 해주는듯.. 실제로 하위 pom에서도 <build><plugins><plugin> 을 넣어줘야 실행된다. 다만, 이클립스 플러그인처럼 별도 설정 없이도 사용가능한 플러그인은 <build><plugins><plugin>를 안줘도 하위pom에서 실행 가능하다.


아 어렵네..

Posted by 용식

pom.xml에 아래의 설정을 추가한다.


<build>

  <plugins>

....

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-jar-plugin</artifactId>

<version>2.4</version>

<configuration>

 <archive>

   <manifest>

     <addClasspath>true</addClasspath>

     <classpathPrefix>lib</classpathPrefix>

     <mainClass>com.tistory.devyongsik.utils.IndexingUtil</mainClass>

   </manifest>

 </archive>

</configuration>

      </plugin>

...

</plugins>

</build>


여기저기 찾아보니 예제는 많은데.. 전부 <archive></archive>가 빠져있었다. 

몇번을 해봐도 안되어서 결국 stackoverflow에서 찾았는데...


위 element중 <archive></archive>가 빠져있으면

제대로 되지 않던데... 케바케인건가...


각 element의 상세 설명은 maven 공식 페이지를 참조~

Posted by 용식
eclipse 플러그인을 사용해서

프로젝트를 eclipse 프로젝트로 변환시 캐릭터 인코딩 설정을 변경하는 법

pom.xml에 아래의 설정을 추가한다.


<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-eclipse-plugin</artifactId>
        <version>2.6</version>
        <configuration>
          <additionalConfig>
            <file>
              <name>.settings/org.eclipse.core.resources.prefs</name>
              <content>
                <![CDATA[eclipse.preferences.version=1${line.separator}encoding/<project>=utf-8${line.separator}]]>
              </content>
            </file>
          </additionalConfig>
        </configuration>
      </plugin>
    </plugins>
  </build>


http://maven.apache.org/plugins/maven-eclipse-plugin/eclipse-mojo.html


Posted by 용식

crescent에서 luceneKoreanAnalyzer.jar를 사용하는데

별도의 프로젝트로 나누어져있다. 처음에 이것을 그냥 이대로둘지.. maven을 사용해서 모듈로 합칠지..

고민을 하다가... 별도 프로젝트로 두면서 crescent에 의존성 설정을 해주면 crescent 빌드 할 때마다 자동으로

luceneKoreanAnalyzer를 다운받아 사용 할 수 있겠다 싶은 생각이 들었다.


그렇다면 이제 필요한것이 maven repository인데..


혹시 github이라면.. 뭔가 되지 않을까 싶어서 찾아봤더니 아래와 같은 글이 있었다.


http://cemerick.com/2010/08/24/hosting-maven-repos-on-github/


오옷..!


그래서 한번 따라해보았다. crescent와 luceneKoreanAnalyzer는 이미 maven 프로젝트로 만들어져있다고 가정한다.


1. github 사이트에 maven-repository로 사용 할 새로운 repository를 생성한다.


2. local pc에서 위 repository를 clone 할 디렉토리를 하나 생성한다.

[need4spd $] mkdir need4spd-maven-repo)


3. git repository로 만든다

[need4spd need4spd-maven-repo $] git init


4. origin으로 remote repository를 alias 걸어주고 pull 실행

[need4spd need4spd-maven-repo $] git remote add origin https://github.com/need4spd/need4spd-maven-repo.git


[need4spd need4spd-maven-repo $] git pull origin master


5. need4spd-maven-repo의 하위 디렉토리로 snapshots, releases 디렉토리를 생성한다.

[need4spd need4spd-maven-repo $] mkdir snapshots releases


6. luceneKoreanAnalyzer의 pom.xml에 아래의 설정을 추가한다. deploy 페이즈를 실행하기 위해서는 필요하다.

<distributionManagement>

    <repository>

        <id>repo</id>

        <url>https://github.com/need4spd/need4spd-maven-repo/raw/master/releases</url>

    </repository>

    <snapshotRepository>

        <id>snapshot-repo</id>

        <url>https://github.com/need4spd/need4spd-maven-repo/raw/master/snapshots</url>

    </snapshotRepository>

</distributionManagement>


7. luceneKoreanAnalyzer에서 deploy 페이즈를 실행한다. 단, 위 설정 그대로 실행하면 github으로 바로 deploy를 시도하는데.. 당연히 그건 안된다.. 그래서 일단 로컬에 만들었던 need4spd-maven-repo 디렉토리로 deploy가 되도록 실행한다.

[need4spd luceneKoreanAnalyzer $] mvn -DaltDeploymentRepository=snapshot-repo::default::file:../need4spd-maven-repo/snapshots clean deploy


8. 성공했다면, local need4spd-maven-repo에 deploy가 되었을 것이다. 그렇다면 이제 이것을 remote repository로 push하자.

[need4spd need4spd-maven-repo $] git push origin master


9. 이제 crescent에서 받을 수 있는 준비가 되었다. crescent의 pom.xml에 다음을 추가하자.

<repository>

   <id>need4spd-snapshot</id>

   <url>https://github.com/need4spd/need4spd-maven-repo/raw/master/snapshots</url>

</repository>

<repository>

   <id>need4spd-releases</id>

   <url>https://github.com/need4spd/need4spd-maven-repo/raw/master/releases</url>

</repository>

...

<dependency>

   <groupId>com.tistory.devyongsik</groupId>

   <artifactId>luceneKoreanAnalyzer</artifactId>

   <version>1.0-SNAPSHOT</version>

 </dependency>


10. crescent에서 빌드 실행

[need4spd crescnet $] mvn clean package



일단 local에 deploy후에 별도로 push를 해줘야하긴 하지만 개인 용도로 사용하기엔 큰 무리가 없어보인다..

근데 왠지 github에 아이디 패스워드 설정해서 바로 deploy 할 수 있는 플러그인이 있을 것 같다. --ㅋ


이거같다..

https://github.com/JakeWharton/github-deploy-maven-plugin

Posted by 용식


(http://book.11st.co.kr/Goods.do?cmd=detail&gdsNo=M0000001051599)


얼마전 성주님의 PPT를 보며 따라하다가 Ivy를 접하면서 헤맸던 것..

그리고 Crescent에서 Korean Analyzer에 대한 고민 (프로젝트를 따로 갈 것인가..)

Maven에 대해 전혀 모르고, 의존성 관리의 필요성을 잘 느끼지 못 하고 있던 찰나에..

강철구님께서 메이븐을 한번 보라고 하신 조언으로 구매를 하여 보았다.


의외로 국내에 메이븐 번역서가 별로 없어서 좀 놀랐는데

다행이 박재성님께서 쓰신 책이 있어서 고민없이 구매하였다.


결론적으로 이 책은 Maven을 설명하는데도 아주 훌륭하지만

책을 따라 읽어나가는 과정만으로도 프로젝트를 진행하는 방법에 대한 노하우를

상당히 많이 배울 수 있다. 책을 통한 선배의 경험을 얻는 느낌이 물씬 풍기는 그런책이다.


실제로 처음 Maven을 접하면서부터 그 기능을 하나씩 활용해나가는 과정이 책안에 모두

녹아있어서 공부하는 입장에서도 그대로 따라가기만 하면 큰 무리가 없다.


그리고, 항상 왜? 라는 의문을 주고.. 그것을 해결하기위한 방법을 제시해주기 때문에

가끔 무언가를 공부할때 드는 생각인 "왜 이런게 필요한거지?" 라는 의문에 대한 답도

그때 그때 얻을 수 있다.


개인적으로도 이런 식의 책(설명)을 좋아하기 때문에 마음에 드는 책이다.


다만, 책의 후반에서 모듈의 생성이 시작되면서

pom이 상속되고 의존되고.. 이러한 것들에 의해서 잘 따라오던 Maven 학습의 난이도가

급상승하는 느낌을 좀 받았다.. 이때부터는 실습은 하지 않고 책만 읽고 있었는데.. Maven 초보자가 머리로만

따라 갈 수 있는 수준은 넘어섰다는 생각이...

그때의 느낌은 "와.. 이렇게까지...설정 파일을 만져야하나.." 라는 생각이 들었다.


만약 내가 maven을 사용한다면 그냥 어느 정도 수준에서 끊고 복잡도를 좀 낮춰야 할지도 모르겠다..하는 생각이 조금 들었음...


그리고 아무래도 실제로 사용해서 프로젝트를 진행해보지 않으면 알 수 없는 경험으로만 받을 수 있는

노하우 역시 반드시 필요할듯하다.


아무튼 이 책을 통해 Maven에 대해 알게된점, 왜 Maven을 쓸까? 라는 의문에 대한 해답도 어느정도 얻었다는 점

그리고 그러한 지식을 바탕으로 Ivy등에도 좀 더 쉽게 접근 할 수 있지 않을까... 하는 생각이 드는 것들이

큰 수확이라고 생각한다. 


또 이클립스에서 프로젝트를 열었는데 라이브러리가 아무것도 안 보이는 것도 좀 당황스럽다....

메이븐으로 만들어진 프로젝트는 메이븐을 아는 사람만이 빌드 할 수 있는 것도.. 뭐 ant는 안 그렇겠냐만은...

그래도 라이브러리 보이고 소스 보이면 수동으로라도 우격다짐으로 만들 수는 있을텐데..


암튼...


이 학습을 바탕으로 이제 사용을 해봐야 할 것 같은데...

1차 목표는 Crescent와 Korean Analyzer

2차 목표는 다시 개시할 사내 프로젝트에 Maven 혹은 ant+Ivy를 적용하는 것으로

세워보려고한다.


좋은 책을 내주신 박재성님께 감사를.... 

Posted by 용식