본문 바로가기

Build/Maven

07. Maven plugin

 
앞서 Maven 에서 많이 사용되는 phase 를 살펴보았다. 
 
이런 메이븐 페이즈 또한 메이븐 플러그인을 통해 실질적인 작업이 실행된다.
 
( 즉 모든 기능은 플러긴 기반이다. ) 
 
 

많이 사용되는 plugins
 
앞서 phase 에서 사용되었던 동작들이 정의된 plugin 이 많이 사용된다.
 
 
 
 

메이븐 플러그인 정의
 
 
 

메이븐 플러그인 실행
 
- 메이븐은 하나에 플러그인에서 실행할 수 있는 여러 작업들이 있다.
 
- 이 각각의 작업을 골 ( goal ) 이라고 정의한다.
 
- 하나의 플러그인에 여러개의 골이 있다.
 
- 플러그인을 mvn groupId:artifactId:version:goal 로 해당 goal 을 실행시킬수 있다.
 
   mvn org.apache.maven.plugins : maven-compiler-plugin : 2.1 : compile 
 
- 로컬 저장소에 설치된 가장 최신 버전의 플러그인을 실행한다면 version 은 생략 가능하다.
 
   mvn org.apache.maven.plugins : maven-compiler-plugin : compile 
 
- maven - $name - plugin 순서의 artifactId 를 가지면 $name 만 쓸수 있다.
 
   mvn org.apache.maven.plugins : compiler : compile 
 
- groupId 가 MAVEN_HOME/conf/settings.xml 이나 USERS/.m2/setting.xml 에서
 
  아래와 같이 설정되면 groupId 생략가능하다.
 
  
 
   mvn compiler : compile 
 
 
 

되돌아보기
 
앞서 실행한 두 goal 도 실제로는 아래와 같은 정보를 포함하고 있다.
 
archetype:generate
 
groupId : org.apache.maven.plugins
artifactId : maven-archetype-plugin
goal : generate
 
 
help:effective-pom
 
groupId : org.apache.maven.plugins
artifactId : maven-help-plugin
goal : effective-pom
 
 

Example
 
아래 명령으로 Maven Project 를 만들면 pom.xml 에 plugins 정보를 포함되어 generate 된다.
 
 mvn archetype:generate
-DgroupId=com.mycompany.app
-DartifactId=plugin-app
-Dversion=1.0
-DpackageName=com.mycompany.app
-DarchetypeGroupId=org.apache.maven.archetypes
-DarchetypeArtifactId=maven-archetype-quickstart
-DinteractiveMode=false
 
해당 pom.xml 의 결과는 아래와 같으며 사용되는 plugins 이 확인 가능하다.
 
<?xml version="1.0" encoding="UTF-8"?>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.mycompany.app</groupId>
  <artifactId>plugin-app</artifactId>
  <version>1.0</version>
  <name>plugin-app</name>
  <!-- FIXME change it to the project's website -->
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
  <build>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <plugins>
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-jar-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-site-plugin</artifactId>
          <version>3.7.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-project-info-reports-plugin</artifactId>
          <version>3.0.0</version>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>
 
 
 

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

09. pom aggregation&inheritance  (0) 2020.01.23
08. Maven Repository  (0) 2020.01.23
06. Maven phase  (0) 2020.01.23
05. Maven POM.xml  (0) 2020.01.23
04. Maven 기본 명령어  (0) 2020.01.23