2016-06-27 1 views
2

우리는 Maven을 사용하여 마이크로 서비스 간의 의존성을 정의하고 관리합니다. 다음은 예입니다Maven을 사용하여 마이크로 서비스 간의 다중 종속성 관리

Microservice 1

<artifactId>ms-1</artifactId> 
<version>0.25.04-SNAPSHOT</version> 
<dependencies> 
    <dependency> 
     <artifactId>ms-2</artifactId> 
     <version>0.25.00-SNAPSHOT</version> 
    </dependency> 
</dependencies> 

Microservice 2

<artifactId>ms-2</artifactId> 
<version>0.25.00-SNAPSHOT</version> 
<dependencies> 
    <dependency> 
     <artifactId>ms-3</artifactId> 
     <version>0.28.00-SNAPSHOT</version> 
    </dependency> 
</dependencies> 

문제는 릴리스 단계가 시간을 많이 복용하고 완전 수동입니다 것입니다 :

  1. 수행 0 제 microservice위한 1,234,355,종속성의 pom.xml의 버전
  2. 번째 microservice위한 mvn:release 수행
  3. 변화 (-SNAPSHOT을 제거) 등
  4. 및 (실제로는 15 microservices에 ...)
  5. ( -SNAPSHOT을 제거)

계단식으로이 릴리스를 수행 할 수있는 자동화 된 방법이 있는지 궁금합니다.

감사합니다.

답변

3

Maven 프로젝트는 종속성 버전 관리를 담당하지 않습니다. 그것은 버전을 책임지는 의존성 인공물을 만드는 프로젝트입니다.

<modules> 
    <module>../ms-1</module> 
    <module>../ms-2</module> 
    <module>../ms-3</module> 
    <module>../...</module> 
    <module>../ms-15</module> 
</modules> 

당신의 microservice 프로젝트가 서로 등에 형제 있다고 가정 :

+- (pseudo-)aggregator 
| +- pom.xml 
+- ms-1 
| +- pom.xml 
+- ms-2 
| +- pom.xml 
+- ms-3 
| +- pom.xml 
+- ms-... 
| +- pom.xml 
+- ms-15 
    +- pom.xml 

귀하의 경우에 당신은 하위 모듈과 같은 모든 microservices를 포함하는 (사이비) 애그리 게이터 (aggregator) 프로젝트를 만들 수 있습니다

해당 경로가 적절하지 않은 경우 <module> 경로를 적절하게 조정하십시오.

이러한 당신은 또한 그에 따라 <dependencies>/<dependency>/<version>의를 업데이트하는하는 .../(pseudo-)aggregator $ mvnrelease:prepare 동안 (기본값은 현재 <version> 마이너스 -SNAPSHOT, 그냥 를 입력하여 확인하기 위해) 모든 프로젝트의 릴리스 버전을 요구하고 있습니다.

또는 묻지 않고 기본값을 사용하는 non-interactive release-B | --batch-mode으로 수행 할 수 있습니다.

그리고 마지막으로 개정

:

release단계 Maven's build lifecycles 없습니다. 다양한 goals을 가진 maven-release-plugin의 바로 가기입니다.

+0

흥미로운 점은 Maven 애그리 게이터에 대해 몰랐습니다. 내가 옳은지 다시 한번 생각해 보도록하겠습니다. 필자는 모든 마이크로 서비스를 모듈로 정의한 전용 POM 프로젝트를 만든 다음 릴리스를 수행하기위한 목표를 호출하는 것이 좋습니다. – frinux

+0

@frinux 맞습니다. [POM 참조, 집계] (https : //maven.apache.org/pom.html # Aggregation) 및 [Maven : 전체 참조, 3.6.2. 다중 모듈 대 상속] (http://books.sonatype.com/mvnref-book/reference/pom-relationships-sect-pom-best-practice.html#pom-relationships-sect-multi-vs-inherit) 기본 정보. 단계, 플러그인, 목표 등이 함께 작동하는 방법은 [이 답변] (http://stackoverflow.com/a/30953905/1744774)을 참조하십시오. –

+0

언급 한 것을 잊어 버린 세부 사항이 있습니다. 마이크로 서비스는 생성 된 JAR (HTTP 클라이언트)을 통해 서로를 소비하지만, Maven 릴리스 시점에는 존재하지 않습니다. 빌드 타임에 모듈이 없다면 모듈을 선언하는 것은 불가능한 것 같습니다. 틀렸습니까? – frinux