수색…


소개

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.xmlmaven-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;


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow