2017-01-27 1 views
2

플러그인을 사용하여 Maven을 통해 슬랙 메시지를 보내고 있습니다. 빌드가 실패했을 때 플러그인을 사용할 수 있다면 자동으로 실패한 빌드에 대한 알림을받을 수 있는지 궁금합니다.빌드가 실패 할 때 Maven 플러그인을 실행하십시오.

+0

빌드 서버에서 알려주는 것이 쉽지 않은가요? –

+0

@JF Meier 좋은 지적, 우리는 앞으로 그것을 할 것입니다. 그러나 그럼에도 불구하고, 나는 가능한 한 묻지 않고있는 것이 아닌가? – Jelle

답변

0

Maven 3.0.2에서 내장 된 EventSpy 메커니즘을 통해 Maven 자체 내에서 그렇게 할 수 있습니다. 빌드의 각 단계에서 Maven 자체 또는 사용자 정의 코드에 의해 여러 이벤트가 발생하며 이러한 이벤트를 수신하여 일부 작업을 수행 할 수 있습니다. Maven에 의해 발생 된 실행 이벤트는 ExecutionEvent 클래스로 표현됩니다. 각 이벤트의 제목은 a type이며, 표시되는 이벤트의 종류는 project failure, Mojo failure, project skipped 등입니다.이 경우 프로젝트 실패 이벤트가 귀하가 찾고자하는 이벤트입니다.

이벤트에 대한 맞춤 스파이는 EventSpy 인터페이스를 구현하는 자바 클래스 일뿐입니다. 바람직하게는 AbstractEventSpy 헬퍼 클래스를 상속 받아야합니다. 예를 들어, 새 프로젝트를 생성하고, 패키지에 따라 다음과 같은 자바 클래스를 추가 (의이 my-spy를 호출하자) :

import org.apache.maven.eventspy.AbstractEventSpy; 
import org.apache.maven.eventspy.EventSpy; 
import org.apache.maven.execution.ExecutionEvent; 
import org.codehaus.plexus.component.annotations.Component; 
import org.codehaus.plexus.component.annotations.Requirement; 
import org.codehaus.plexus.logging.Logger; 

@Component(role = EventSpy.class) 
public class BuildFailureEventSpy extends AbstractEventSpy { 

    @Requirement 
    private Logger logger; 

    @Override 
    public void onEvent(Object event) throws Exception { 
     if (event instanceof ExecutionEvent) { 
      ExecutionEvent executionEvent = (ExecutionEvent) event; 
      if (executionEvent.getType() == ExecutionEvent.Type.ProjectFailed) { 
       logger.info("My spy detected a build failure, do the necessary here!"); 
      } 
     } 
    } 

} 

이 코드는 단순히 @Component 주석 '은 신경 얼기를 통해 스파이를 등록하고 메시지 때를 기록 프로젝트를 구축하지 못했습니다. 해당 클래스를 컴파일하려면 my-spy 프로젝트에 Maven Core에 대한 종속성과 plexus-component-metadata 플러그인 실행을 추가하여 해당 구성 요소에 맞는 Plexus 메타 데이터를 만들어야합니다. 이 프로젝트는 컴파일 (mvn clean install을 통해) 당신의 로컬 저장소에 설치되면

<dependencies> 
    <dependency> 
    <groupId>org.apache.maven</groupId> 
    <artifactId>maven-core</artifactId> 
    <version>3.0.2</version> 
    </dependency> 
</dependencies> 
<build> 
    <plugins> 
    <plugin> 
     <groupId>org.codehaus.plexus</groupId> 
     <artifactId>plexus-component-metadata</artifactId> 
     <version>1.6</version> 
     <executions> 
     <execution> 
      <goals> 
      <goal>generate-metadata</goal> 
      </goals> 
     </execution> 
     </executions> 
    </plugin> 
    </plugins> 
</build> 

, 당신은 core extensions mechanism을 통해 다른 프로젝트의 빌드에 추가 할 수 있습니다.

Maven 3.3.1 이전에는 Maven이 찾을 수 있도록 ${MAVEN_HOME}/lib/ext 폴더에 my-spy JAR을 넣어야했습니다. 3.3.1부터는 Maven 설치를 할 필요가 없으며 프로젝트 기본 디렉토리 (${maven.multiModuleProjectDirectory}/.mvn/extensions.xml)에 .mvn/extensions.xml 파일을 생성 할 수 있습니다. 그 내용은 spy 프로젝트의 Maven 좌표를 가리키는 확장을 선언 한 것일 뿐이므로

<?xml version="1.0" encoding="UTF-8"?> 
<extensions> 
    <extension> 
    <groupId>my.spy</groupId> 
    <artifactId>my-spy</artifactId> 
    <version>0.0.1</version> 
    </extension> 
</extensions> 

일 것입니다. Maven (≥ 3.3.1)은 기본적으로 해당 파일을 검색하므로 스파이가 올바르게 등록되고 빌드하는 동안 호출됩니다.


남은 일은 스파이가해야 할 일을 코드하는 것입니다. 귀하의 경우 Maven 플러그인을 호출해야하므로 매우 쉽게 할 수있는 Mojo Executor 라이브러리를 살펴보십시오.

관련 문제