2017-12-12 10 views
0

私は、モジュールの1つにspring-cloud-contract-maven-pluginを追加するまで、各モジュールをArtifactoryに細かくデプロイするマルチモジュールプロジェクトを持っています。これはプロデューサAPIなので)。Spring Cloud契約が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を使用できることがわかりました。クラス。しかし、基本クラスのディレクトリを指定する方法はありません。モックを生成するためにサービスモジュールのいくつかのクラスを使用するため、ベーステストクラスを親に移動することはできません。

これを行う方法はありますか、契約用に別のプロジェクトを作成する必要がありますか?事前に

おかげ

+0

サンプルをどこかにアップロードしてチェックアウトできますか? –

+0

私は、プロジェクトの縮小バージョンを作成して正常に動作するので、1つのモジュールで持っている他のプロジェクトでは発生しない設定との競合です。問題は、spring-boot-starter-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は、プラグを持つマルチモジュールプロジェクトと競合しているようですプラグインのような拡張機能を使用しています。 hereと記載されている既知の問題があり、Jeromeの回答も見るとhereです。

解決方法1:

それは次のようになりますので、前のブロックからdeployAtEndオプションを削除します。

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

解決方法2:

があるが、すべてのモジュールにプラグインを設定します彼らはそれを必要としません。そうするために:すべてのモジュールの

  • のsrc /テスト/リソースの下に空の「契約」フォルダを追加

  • は、サービスモジュールのPOMファイルにこれを追加します。

<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> 
  • 他のモジュールのPOMファイルにこれを追加:
<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> 
関連する問題