2017-12-12 28 views
0

저는 모듈 중 하나에 스프링 클라우드 - 계약 - 메이븐 플러그인을 추가 할 때까지 각 모듈이 Artifactory에 잘 배치되는 다중 모듈 프로젝트를 가지고 있습니다 (서비스, 제작자 API이므로).스프링 클라우드 계약이 Maven 다중 모듈 프로젝트의 Artifactory에 배치되지 않음

이 프로젝트는이 구조를 가지고

우리는 미래에 클라이언트와 일반을 제거하고 커플 링을 줄이기위한 소비자의 척하기 클라이언트를 가지고 있고, 내부 모듈없이 기본 프로젝트를 갖고 싶어
parent 
- common (shared DTOs) 
- client 
- service 

, 하지만 지금은이 구조를 유지해야합니다.

내가 먼저 내 최초의 해결 방법은 젠킨스 파이프 라인 그것은 서비스와 스텁을 배포

sh './mvnw clean deploy -U --projects=xxx-service' 

이를 추가 할 수 있었다 그래서 스텁, Artifactory에 푸시되지 않은 것으로 나타났습니다,하지만 난 그 누구도 눈치 이 명령이 실행될 때 모듈이 배포됩니다 :

[INFO] Installing /xxx/xxx-service/target/xxx-service-1.7.0-SNAPSHOT.jar to /xxx/.m2/repository/xxx/xxx-service/1.7.0-SNAPSHOT/xxx-service-1.7.0-SNAPSHOT.jar 
[INFO] Installing /xxx/xxx-service/pom.xml to /xxx/.m2/repository/xxx/xxx-service/1.7.0-SNAPSHOT/xxx-service-1.7.0-SNAPSHOT.pom 
[INFO] Installing /xxx/xxx-service/target/xxx-service-1.7.0-SNAPSHOT-stubs.jar to /xxx/.m2/repository/xxx/xxx-service/1.7.0-SNAPSHOT/xxx-service-1.7.0-SNAPSHOT-stubs.jar 
[INFO] 
[INFO] --- maven-deploy-plugin:2.8.2:deploy (default-deploy) @ xxx-service --- 
[INFO] Deploying xxx:xxx-service:1.7.0-SNAPSHOT at end 
:

sh './mvnw clean deploy -U' 

는 출력의 끝입니다

모든 Maven 구성을 상위 POM 파일로 이동하고 계약 및 기본 테스트 클래스를 서비스 모듈에 보관하려고했습니다. 나는 this page을보고 플러그인을 구성하는 방법을 설명했으며 contractsDirectory를 사용하여 계약 파일 디렉토리, 생성 된 테스트의 디렉토리를 지정하는 gmavenplus-plugin 및 기본 패키지를 지정하는 packageWithBaseClasses를 사용할 수 있음을 확인했습니다. 수업. 그러나 기본 클래스의 디렉터리를 지정할 방법이 없습니다. mock을 생성하기 위해 서비스 클래스의 일부 클래스를 사용하기 때문에 기본 테스트 클래스를 상위 클래스로 이동할 수 없습니다.

계약을 수행하는 방법이 있습니까? 아니면 계약서에 별도의 프로젝트를 만들어야합니까? 사전에

감사

+0

샘플을 업로드하여 확인할 수 있습니까? –

+0

프로젝트의 축소 버전을 만들었으므로 제대로 작동하므로 하나의 모듈로 다른 프로젝트에서 발생하지 않는 일부 구성과 충돌이 발생합니다. 문제는 spring-boot-startter-parent를 확장하는 사용자 정의 부모 프로젝트로 인해 발생합니다. 해당 부모의 코드를 복사하면 API가 잘 작동하지만 확장하는 경우에는 작동하지 않습니다. 흥미롭게도 플러그인 구성에서 행을 제거하지만 스텁을 생성하지 않으면 작동합니다. 더 많은 정보를 계속 조사하고 게시 할 것입니다. 감사합니다 – rafaborrego

+0

그것은 https://issues.apache.org/jira/plugins/servlet/mobile#issue/MDEPLOY-193 여기에 설명 된 것과 관련이있는 것으로 보입니다 : https://stackoverflow.com/questions/36328154/maven- deploy-plugin-deployatend-not-working. 플러그인이 어떻게 충돌하고 해결할 수 있는지 알아 내려고 노력할 것입니다. – rafaborrego

답변

1

문제의 원인 :

내 API 확장 부모 프로젝트에서이 있었다 :

<plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-deploy-plugin</artifactId> 
     <version>${maven-deploy-plugin.version}</version> 
     <configuration> 
      <deployAtEnd>true</deployAtEnd> 
     </configuration> 
    </plugin> 

왜이 문제는 다음과 같습니다

maven-deploy-plugin이 플러그인이있는 다중 모듈 프로젝트와 충돌하는 것 같습니다. 플러그인은 spring-cloud-contract-maven-plugin과 같은 확장 기능을 사용합니다. here 문서화 된 알려진 문제가 있으며, 제롬의 답변도 역시 here입니다.

해결 방법 1 : 그것은 될 수 있도록

이전 블록에서 deployAtEnd 옵션을 제거

<plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-deploy-plugin</artifactId> 
     <version>${maven-deploy-plugin.version}</version> 
    </plugin> 

해결 방법 2 :

구성 플러그인을 모든 모듈 비록에 그들은 그것을 필요로하지 않는다.그렇게하는 경우 :

:

  • SRC/테스트 아래 빈 "계약"폴더 추가/자원을 모든 모듈에

  • 는 서비스 모듈의 치어 파일이 추가

:
<build> 
    <plugins> 
     <plugin> 
      <groupId>org.springframework.cloud</groupId> 
      <artifactId>spring-cloud-contract-maven-plugin</artifactId> 
      <version>${spring-cloud-contract.version}</version> 
      <extensions>true</extensions> 
      <configuration 
       <baseClassForTests>com.xxx.BaseContractTest</baseClassForTests> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 
  • 다른 모듈의 치어 파일이 추가
    <build> 
        <plugins> 
         <plugin> 
          <groupId>org.springframework.cloud</groupId> 
          <artifactId>spring-cloud-contract-maven-plugin</artifactId> 
          <version>${spring-cloud-contract.version}</version> 
          <extensions>true</extensions> 
         </plugin> 
        </plugins> 
    </build>