maven:사용자 정의 maven 플러그 인 을 통 해 사용자 정의 응용 서 비 스 를 시작 합 니 다.

5125 단어 자바
우 리 는 tomcat 가 maven 을 통 해 시작 할 수 있다 는 것 을 알 고 있 습 니 다.다음 과 같은 명령 을 실행 하면 tomcat 서 비 스 를 시작 할 수 있 습 니 다.
화면 음악 n tomcat 7:run 참조
만약 우리 도 tomcat 처럼 Maven 으로 자신의 응용 서 비 스 를 직접 시작 하고 싶다 면 어떻게 해 야 합 니까?이것 이 바로 내 가 요 며칠 동안 고생 하고 있 는 문제 다.이 생각 을 실현 하려 면 구체 적 인 몇 가지 조건 이 필요 하 다.
  • 사용자 정의 Maven 플러그 인 tomcat 는 Maven 에서 시작 합 니 다.사실은 org.apache.tomcat.maven:tomcat7-maven-plugin 플러그 인 을 실행 함으로써 이 루어 집 니 다.위의 mvn tomcat7:run 명령 은 플러그 인의 약자 입 니 다.따라서 사용자 정의 응용 서 비 스 를 마 븐 으로 시작 하려 면 비슷 한 플러그 인 을 실현 하고 자신의 서비스 시작 작업 을 플러그 인 에 넣 어 실행 해 야 합 니 다.사용자 정의 플러그 인 개발 에 관 한 기본 지식 은 본 고의 중점 이 아 닙 니 다.메모:사용자 정의 플러그 인의 pom.xmlpackage 유형 은 maven-plugin
  • 으로 정의 해 야 합 니 다.
  • 창고 에 사용자 정의 플러그 인 이 있 습 니 다.당연히 창고(maven 중앙 창고 또는 자신의 사복)에 발표 해 야 maven 에서 찾 을 수 있 습 니 다.이 부분 은 본문의 중점 이 아니 므 로 인터넷 에서 플러그 인 을 어떻게 발표 하 는 지 많은 글 을 찾 을 수 있다.

  • 사용자 정의 maven 플러그 인 은 듣 기 에 매우 높 은 것 입 니 다.사실은 복잡 하지 않 습 니 다.org.apache.maven.plugin.AbstractMojo 을 계승 하여 execute 추상 적 인 방법 을 실현 하면 가장 간단 한 플러그 인 을 완성 할 수 있 습 니 다.다음은 제 프로젝트 에서 사용 하 는 사용자 정의 서 비 스 를 시작 하 는 간단 한 플러그 인 입 니 다.그 중에서 Main 종 류 는 서비스 입구 입 니 다.
    RunMojo.java
    import org.apache.maven.plugin.AbstractMojo;
    
    import org.apache.maven.plugin.MojoExecutionException;
    import org.apache.maven.plugin.MojoFailureException;
    import org.apache.maven.plugins.annotations.Mojo;
    import org.apache.maven.plugins.annotations.Parameter;
    
    import net.gdface.facelog.service.Main;
    
    /** * maven   
    * facelog , {@link Main#main(String[])} * * @author guyadong * */
    @Mojo(name = "run", requiresProject = false) public class RunMojo extends AbstractMojo { /** * Set this to true to allow Maven to continue to execute after invoking the * run goal. * */ @Parameter(property = "maven.facelog.fork", defaultValue = "false") private boolean fork; public RunMojo() { } @Override public void execute() throws MojoExecutionException, MojoFailureException { // Main.main(null); if (!fork) { waitIndefinitely(); } } /** * Causes the current thread to wait indefinitely. This method does not * return. */ private void waitIndefinitely() { Object lock = new Object(); synchronized (lock) { try { lock.wait(); } catch (InterruptedException e) { getLog().warn("RunMojo.interrupted", e); } } } }

    위의 이 플러그 인 은 매우 간단 합 니 다.기본 값 이 있 는 fork 매개 변수 만 정의 하고 Main.main() 방법 으로 서 비 스 를 시작 합 니 다.그러나 서 비 스 를 시작 하 는 플러그 인 으로서 쓰기 에는 일반 플러그 인과 약간 다르다.
  • 클래스 의 주석 에 requiresProject = false 이 있 음 을 주의 하 십시오.이 플러그 인 은 특정 항목 에 의존 하지 않 고 실행 할 수 있 습 니 다.쉽게 말 하면 Maven 프로젝트 의 폴 더 에서 실행 할 필요 가 없고 그 어떠한 위치 에서 도 실행 할 수 있 습 니 다.Google 은 비 개발 환경 에서 이 플러그 인 을 사용 하여 서 비 스 를 시작 할 것 이기 때문에 false,
  • 으로 지정 해 야 합 니 다.
  • 위의 코드 에서 main 방법 으로 서 비 스 를 시작 한 후에 waitIndefinitely 방법 으로 현재 스 레 드 를 의도 적 으로 무한 대기 시 켰 다.일반적으로 응용 서 비 스 는 모두 비동기 로 시작 되 기 때문에 서비스 가 시 작 된 후에 메 인 스 레 드 호출 은 바로 돌아 갑 니 다.메 인 스 레 드 execute 방법 은 바로 돌아 갑 니 다.Maven 호출 이 끝나 면 서비스 도 자동 으로 끝 납 니 다!그래서 여 기 는 waitIndefinitely 방법 으로 메 인 스 레 드 의 끝 을 막 아야 합 니 다.

  • tomcat 플러그 인도 이렇게 했 습 니 다.waitIndefinitely 방법의 코드 는 tomcat7-maven-plugin 플러그 인의 소스 코드 에서 직접 베 낀 것 입 니 다.왜 메 인 스 레 드 가 끝 난 후에 Maven 은 서비스 스 레 드 가 끝나 지 않 고 플러그 인 운행 을 끝 내 는 지 저도 잘 모 르 겠 습 니 다.이것 은 mave 호출 플러그 인 체제 와 관련 되 어야 합 니 다.상세 한 연구 가 없습니다.

    좋은 웹페이지 즐겨찾기