Whiteship's Note

'plugin'에 해당되는 글 2건

  1. 2007.11.28 Plugin (4)
  2. 2007.11.16 Maven 용어 1 (2)

Plugin

Build/Maven : 2007. 11. 28. 10:54


플러그인 역시 Maven의 핵심 요소로 Goal이라는 실행 단위들을 집합으로 구성되어 있습니다. 플러그인은 새로운 패키징 타입을 도입하여 빌드 라이프사이클을 만들어낼 수도 있습니다.

플러그인 이름 살펴보기

여태까지 사용했었던 clean:clean 이라는 Goal은 실제로는 org.apache.maven.plugins:maven-clean-plugin:clean 이었습니다. 특정 버전의 플러그인을 사용하기 위해 다음과 같이 버전을 명시할 수도 있습니다. org.apache.maven.plugins:maven-clean-plugin:2.1.1:clean

위 Goal의 맨 앞의 값 org.apache.maven은 groupId로 기본값이 org.apache.maven입니다.

<project>
  ...
  <build>
    ...
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>1.5</source>
          <target>1.5</target>
        </configuration>
      </plugin>
    </plugins>

따라서 플러그인을 등록할 때도 groupId가 빠져있는데, 기본으로 org.apache.maven.plugins 와 org.codehaus.mojo 는 생략해도 됩니다. 생략해도 되는 groupId를 추가하고 싶다면, settings.xml 의 pluginGroups 엘리먼트에 다음과 같이 추가해주면 됩니다.

<settings>
  ...
  <pluginGroups>
    <pluginGroup>com.training.plugins</pluginGroup>
  </pluginGroups>
</settings>

=> mvn maven-zip-plugin:zip
이제 위와 같이 사용할 수 있습니다.

중간에 위치한 플러그인 이름은 <<<maven-${name}-plugin>> 이런 형식이거나 ${name}-maven-plugin 이기 때문에 컨벤션에 따라 플러그인을 찾습니다. 따라서 다음과 같이 플러그인 이름도 줄여서 사용할 수 있습니.다

=> mvn zip:zip

플러그인 설정하기

플러그인 정보를 build 엘리먼트의 plugins 목록에 넣어줍니다. 그리고 각각의 플러그인이 필요로 하는 기본 설정을 해줍니다. 이 부분이 다소 복잡할 수 있지만 CoC에 입각하여 기본 설정 값들을 사용할 수 있습니다. 특정 Goal들은 기본적으로 빌드 라이프사이클의 특정 Phase과 연관을 맺게 됩니다. 하지만 이런 기본 설정을 변경할 수도 있습니다.
  • 이미 라이프사이클의 일부로 등록되어 있는 플러그인이나 특정 Goal을 설정하기
  • 라이프사이클에 등록되어 있지 않은 플러그인이나 특정 Goal을 설정하기
  • 라이프사이클의 일부로 특정 Goal을 추가하고 설정하기
  • 플러그인 종속성 목록 변경하기
  • 플러그인 확장기능을 빌드 클래스로더에 추가하기
위에서 세 번째 까지는 plugin 엘리먼트의 configuration 엘리먼트를 사용하며, 나머지는 다른 것을 사용합니다. 다음은 complie 플러그인의 기본 값을 JDK 1.4로 변경하는 설정입니다.

<project>
  ...
  <build>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>1.4</source>
          <target>1.4</target>
        </configuration>
      </plugin>

특정 Goal의 설정을 변경하고 싶다면, 다음과 같이 execution 엘리먼트 안에서 하나의 Goal과 그것의 설정을 변경할 수 있습니다.

<project>
  ...
  <build>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <executions>
          <execution>
            <goals>
              <goal>compile</goal>
              <goal>testCompile</goal>
            </goals>
            <configuration>
              <source>1.4</source>
              <target>1.4</target>
            </configuration>
          </execution>
        </executions>
      </plugin>

빌드 라이프사이클에 등록되어 있지않은 플러그인을 설정하는 방법은 다음과 같습니다.

<project>
  ...
  <build>
    <plugins>
      <plugin>
        <artifactId>maven-antrun-plugin</artifactId>
        <configuration>
          <tasks>
            <echo>The JAVA_HOME var is ${env.JAVA_HOME}</echo>
          </tasks>
        </configuration>
      </plugin>

이렇게 하면, 이 Goal을 실행시키기 위해서 mvn antrun:run 을 실행해야 합니다. 특정 Phase에 연과시키기 위해서드는 다음과 같이 설정해 줍니다.

<project>
  ...
  <build>
    <plugins>
      <plugin>
        <artifactId>maven-antrun-plugin</artifactId>
        <configuration>
          <tasks>
            <echo>The JAVA_HOME var is ${env.JAVA_HOME}</echo>
          </tasks>
        </configuration>
        <executions>
          <execution>
            <goals>
              <goal>run</goal>
            </goals>
            <phase>verify</phase>
          </execution>
        </executions>
      </plugin>



'Build > Maven' 카테고리의 다른 글

Maven 괜찮은데~  (0) 2007.12.04
Site Generation  (0) 2007.12.03
http://mvnrepository.com/  (0) 2007.12.02
Profile  (0) 2007.11.30
Archetype  (0) 2007.11.29
Plugin  (4) 2007.11.28
Build Lifecycle(site)  (0) 2007.11.27
Build Lifecycle(default 자세히)  (0) 2007.11.27
Build Lifecycle(default)  (0) 2007.11.27
Build Lifecycle(clean)  (2) 2007.11.27
POM  (0) 2007.11.26
top

TAG maven, plugin
  1. jjaeko 2008.12.28 01:28 PERM. MOD/DEL REPLY

    ${env.JAVA_HOME} 같은 값들은 어디에서 가져오는 건가요?
    antrun plugin으로 ${user.dir} 출력해보면 사용자계정 디렉토리 출력되던데
    이런 내장객체류의 키워드들 어디에 어떤식으로 저장되어 있고 이런것들 무엇무엇이 있는지
    알려면 어디를 봐야 하나요?

    Favicon of http://whiteship.tistory.com BlogIcon 기선 2008.12.28 11:10 PERM MOD/DEL

    http://books.sonatype.com/maven-book/reference/resource-filtering.html#d0e16724

    위 문서를 참조해 보세요. 소나타입에서 문서화를 잘해놨네요. :)

  2. jjaeko 2008.12.28 13:23 PERM. MOD/DEL REPLY

    앗 감사합니다

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2008.12.28 13:43 신고 PERM MOD/DEL

    :)

Write a comment.


Maven 용어 1

Build/Maven : 2007. 11. 16. 16:49


  • Plugin
  • Goal
  • Phase
위 세개가 매우 비슷해 보이면서 다른 듯 해서 햇갈립니다. Maven으로 프로젝트 생성하기에서 사용했었던 명령어는 다음과 같이 두 개 밖에 없습니다.

mvn archetype:create 와 mvn package 였습니다.

archetype은 Plugin, create는 Goal, package는 Phase입니다.

Goal은 Plugin에 포함되어 있고, 하나의 Plugin은 여러개의 Goal을 가지고 있습니다. 즉 archetype이라는 Plugin에 create라는 Goal을 가지고 있고, 그것을 실행하여 프로젝트를 생성한 것입니다.
사용자 삽입 이미지
Maven의 Goal은 Ant의 Task와 비슷합니다. 그럼 Ant의 Target과 비슷한 것도 있을 것입니다. 네 비슷한 것이 Maven에도 있는데, 이것은 조금 햇갈립니다. Plugin과 비슷한건지.. Phase와 비슷한건지...

Phase는 Maven의 Build Lifecycle의 한 부분을 가리키는 용어 입니다. 이 단어를 사용하여 mvn을 실행하면 Build Lilfecycle을 실행하게 되며, 실행을 하다가 인자로 준 Phase까지 수행하고 멈추게 됩니다. 어떻게 보면, Ant의 Target하고도 비슷하지만.. 많이 다릅니다.

먼저 Maven의 Build Lifecycle 중에 일부를 보면 다음과 같습니다.
사용자 삽입 이미지
각각의 Phase는 어떤 일을 할지 정의하지 않고 어떤 Goal을 실행할지 설정해 두었을 것입니다. Goal을 Phase에 바인딩해 두었다고 생각하면 되겠습니다. package Phase의 경우 jar:jar 라는 goal로 바인딩되어 있습니다.
사용자 삽입 이미지
위의 빌드 라이프사이클 중에 하나의 Phase를 인자로 넘겨주면, 처음부터 해당 Phase까지에 바인딩되어 있는 모든 Goal들을 실행합니다. 따라서 mvn package같은 경우 다음과 같은 goal들이 실행됩니다.
사용자 삽입 이미지
따라서 mvn package 대신에 mvn resources:resources compiler:compile resources:testResources compiler:testCompile surefire:test jar:jar라고 입력해도 같은 결과를 볼 수 있습니다.

Phase는 Ant의 Target, Goal은 Ant의 Task, Plugin는 Goal들을 묶어놓은 것으로 생각할 수 있겠습니다.

'Build > Maven' 카테고리의 다른 글

Build Lifecycle(site)  (0) 2007.11.27
Build Lifecycle(default 자세히)  (0) 2007.11.27
Build Lifecycle(default)  (0) 2007.11.27
Build Lifecycle(clean)  (2) 2007.11.27
POM  (0) 2007.11.26
mvn site  (0) 2007.11.20
Maven 용어 3  (0) 2007.11.19
Maven 용어 2  (0) 2007.11.19
Maven 용어 1  (2) 2007.11.16
Maven으로 프로젝트 생성하기  (0) 2007.11.15
Maven 공부시작  (6) 2007.11.15
top

  1. 2008.12.27 18:31 PERM. MOD/DEL REPLY

    비밀댓글입니다

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2008.12.27 23:26 신고 PERM MOD/DEL

    흠.. 저도 메이븐 소스 코드를 뒤져보진 않아서 잘 모르겠지만 어딘가 있지 않을까요. ㅋㅋ

    저는 위 그림에 있는 골 들 중에서 jar:jar 빼곤 사용해본게 없네요. 자주 사용하는 건..

    mvn clean
    mvn war:inplace
    mvn install
    mvn deploy

    요정도 입니다.

    빌드 할 땐 test 랑 clover 관련 골을 추가로 사용하고 있고 코드 검사 툴을 사용하신다면 해당 메이븐 플러긴이 제공하는 골들도 추가할 수 있습니다.

Write a comment.