maven:사용자 정의 maven 플러그 인 을 통 해 사용자 정의 응용 서 비 스 를 시작 합 니 다.
5125 단어 자바
화면 음악 n tomcat 7:run 참조
만약 우리 도 tomcat 처럼 Maven 으로 자신의 응용 서 비 스 를 직접 시작 하고 싶다 면 어떻게 해 야 합 니까?이것 이 바로 내 가 요 며칠 동안 고생 하고 있 는 문제 다.이 생각 을 실현 하려 면 구체 적 인 몇 가지 조건 이 필요 하 다.
org.apache.tomcat.maven:tomcat7-maven-plugin
플러그 인 을 실행 함으로써 이 루어 집 니 다.위의 mvn tomcat7:run
명령 은 플러그 인의 약자 입 니 다.따라서 사용자 정의 응용 서 비 스 를 마 븐 으로 시작 하려 면 비슷 한 플러그 인 을 실현 하고 자신의 서비스 시작 작업 을 플러그 인 에 넣 어 실행 해 야 합 니 다.사용자 정의 플러그 인 개발 에 관 한 기본 지식 은 본 고의 중점 이 아 닙 니 다.메모:사용자 정의 플러그 인의 pom.xml
중 package
유형 은 maven-plugin
사용자 정의 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 호출 플러그 인 체제 와 관련 되 어야 합 니 다.상세 한 연구 가 없습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.