Apache Maven
Maven 플러그인 만들기
수색…
소개
Maven을 사용하면 맞춤 플러그인을 구현하고 사용할 수 있습니다. 이러한 플러그인을 사용하면 추가 동작을 Maven 라이프 사이클의 모든 단계에 바인딩 할 수 있습니다.
각 Maven 목표는 MOJO (Maven Ordinary Java Object)를 구현하여 작성됩니다. Java 클래스는이를 호출하는 방법을 설명하는 주석으로 구현됩니다.
플러그인의 목표 접두사는 이슈 이름에서 파생됩니다. artifact hello-world-plugin
은 목표 접두어 hello-world
만듭니다. hello
목표는 mvn hello-world:hello
로 실행할 수 있습니다.
비고
Maven 플러그인은 플러그인 메타 데이터를 설명하는 maven/plugins.xml
을 포함하는 JAR입니다. 이 파일은 maven-plugin-plugin
의해 생성됩니다.
Maven 이슈를 Maven 플러그인으로 선언
Maven이 만든 artifact는 pom.xml
에 maven-plugin
으로 패키지를 지정하여 Maven 플러그인으로 선언 할 수 있습니다.
<packaging>maven-plugin</packaging>
플러그인 API 및 주석에 대한 종속성을 선언해야합니다.
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-plugin-api</artifactId>
<version>3.3.9</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.maven.plugin-tools</groupId>
<artifactId>maven-plugin-annotations</artifactId>
<version>3.5</version>
<scope>provided</scope>
</dependency>
메타 데이터를 생성하려면 플러그인을 추가해야합니다.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-plugin-plugin</artifactId>
<version>3.5</version>
</plugin>
목표 만들기
목표는 MOJO를 작성하여 구현됩니다. 이 파일은 maven-plugin-annotations
주석으로 주석 처리 된 클래스 파일입니다.
@Mojo(name = "hello")
public final class HelloWorldMojo extends AbstractMojo {
public void execute() throws MojoExecutionException, MojoFailureException {
getLog().info("Hello world");
}
}
플러그인 구성 사용
@Parameter
필드에 주석을 달아 플러그인을 구성 할 수 있습니다. 그런 다음 MOJO에 구성이 주입됩니다.
@Mojo(name = "greet")
public final class GreetMojo extends AbstractMojo {
@Parameter(required = true)
public String name;
public void execute() throws MojoExecutionException, MojoFailureException {
getLog().info("Hello " + name);
}
}
name
매개 변수는 POM에서 구성 할 수 있습니다.
<plugin>
<groupId>com.mattunderscore</groupId>
<artifactId>hello-world-plugin</artifactId>
<version>1.0-SNAPSHOT</version>
<configuration>
<name>Matt</name>
</configuration>
</plugin>
greet
목표가 독립 실행 형 목표로 실행되는 경우 name
매개 변수는 명령 줄에서 속성으로 정의 할 수 있습니다.
mvn <plugin name>:greet -Dname=Geri
프로젝트 정보에 액세스하기
플러그인은 현재 빌드중인 현재 Maven 프로젝트에 대한 정보에 액세스 할 수 있습니다.
@Mojo(name = "project")
public final class ProjectNameMojo extends AbstractMojo {
@Parameter(defaultValue = "${project}", readonly = true, required = true)
private MavenProject project;
public void execute() throws MojoExecutionException, MojoFailureException {
getLog().info("Hello, this is " + project.getName());
}
}
위의 예는 POM의 <project>/<name>
요소에 지정된 Maven 프로젝트의 이름을 콘솔에 출력합니다.
플러그인에서 사용되는 MavenProject
클래스는 플러그인의 POM에서 maven-core
와 (기본) compile
범위의 종속성이 필요합니다.
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-core</artifactId>
<version>3.3.9</version>
</dependency>
또한 주석을 사용 하려면 플러그인의 POM에 다음과 같은 종속성이 필요합니다.
<dependency>
<groupId>org.apache.maven.plugin-tools</groupId>
<artifactId>maven-plugin-annotations</artifactId>
<version>3.5</version>
<scope>provided</scope> <!-- annotations are needed only to build the plugin -->
</dependency>
목표의 기본 단계를 선언하십시오.
@Mojo(name = "hi", defaultPhase = LifecyclePhase.COMPILE)
빌드 디렉토리를 파일로 가져 오기
@Parameter(defaultValue = "${project.build.directory}")
private File buildDirectory;