2016-12-21 5 views
2

私はSwagger(OpenAPI)を使ってAPIを設計し実装しています。私はすでに、機能的なswagger.ymlとそれに基づいてドキュメント、サーバ、クライアントを構築するMavenプロジェクトを用意しています。Mavenをコンパイルするときに重複ファイルのセットの1つのみを考慮する方法

swagger-codegen-maven-pluginは、/target/generated-sources/swaggerディレクトリに抽象クラスと実装クラスを生成します。実装クラスを自分で上書きするはずですから、実装クラスの初期バージョンを/src/main/javaディレクトリに移動しました。

クラスを移動した後でビルドが正しく完了しましたが、mvn clean compileを実行すると、ビルドに重複したクラスがあるためにエラーが発生します。

クリーンビルドを行うたびに、swagger-codegen-maven-pluginは書き直しているクラスを含め、すべてのコードを再生成します。

swagger-codegen-maven-plugin私は生成したくないファイルをリストするはずですが、動作していないようです(プラグインのバージョン2.2.2-SNAPSHOTを使用しています) 。回避策として

#.swagger-codegen-ignore 
OrcamentoApiServiceImpl.java 
PropostaApiServiceImpl.java 

、私は私の変更の実装がコンパイルに使用されるようにmaven-compiler-pluginは、ファイルの生成されたバージョンを除外するためにしようとしているが、それはどちらか動作していません。ここで私が使用している構成は次のとおりです。

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>3.6.0</version> 
      <configuration> 
       <source>1.7</source> 
       <target>1.7</target> 
      </configuration> 
      <executions> 
       <execution> 
        <goals> 
         <goal>compile</goal> 
        </goals> 
        <configuration> 
         <excludes> 
          <exclude>OrcamentoApiServiceImpl.java</exclude> 
          <exclude>PropostaApiServiceImpl.java</exclude> 
         </excludes> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

どのように私はmaven-compiler-pluginが闊歩するMavenプラグインによって生成されたファイルのバージョンを無視し、唯一の鉱山を検討することができますか?

または、代替ソリューションを提案するか、swagger-codegen-maven-plugin.swagger-codegen-ignoreとするかどうかを教えてください。

+0

あなたの間違いは、生成されたソースをプロジェクトのsrc/mainフォルダにコピーしていたことです。あなたはそれを掃除できますか?あなたはその間違いで生きていこうとすることで、より深い混乱に身を投じています。 javaでは、既存のクラスを単純に 'extend'してオーバーライドできます。既存のクラスを物理的に変更する必要はありません。 –

+0

私はそれが一般的に悪い匂いだと理解していますが、swagger-codegenによって生成されたコードでそのアドバイスに従うことができるかどうかはわかりません。実際に、私はswagger-codegenをどう扱うべきかについて別の未解決の質問があります。 http://stackoverflow.com/questions/41184952/how-to-properly-use-the-server-stubs-generated-from-a-swagger-specification – lpacheco

答えて

0

私はまったく同じ問題を抱えていました。ドキュメントからわかったこと(適切な例ではっきりしている可能性があります)から、ignoreファイルは生成されたコードのルートに設定する必要があります。このプラグインをpom.xmlに追加して実際の場所からコピーします:

<plugin> 
    <artifactId>maven-resources-plugin</artifactId> 
    <version>3.0.2</version> 
    <executions> 
     <execution> 
     <id>copy-resources</id> 
     <phase>validate</phase> 
     <goals> 
      <goal>copy-resources</goal> 
     </goals> 
     <configuration> 
      <outputDirectory>${basedir}/target/generated-sources/swagger</outputDirectory> 
      <resources> 
      <resource> 
       <directory>${basedir}/src/main/resources</directory> 
       <includes> 
       <include>.swagger-codegen-ignore</include> 
       </includes> 
      </resource> 
      </resources> 
     </configuration> 
     </execution> 
    </executions> 
    </plugin> 
+0

私はあなたのソリューションが '.swagger-codegen-ignore 'ビルドの始めに正しい場所に移動しますが、' maven-codegen-plugin'は実際にクラスの生成を無視していますか?私はそうではありません。どのバージョンのプラグインを使用していますか? – lpacheco

+0

あなたの解決策は 'clean 'が' .swagger-codegen-ignore'(私は 'maven-clean-plugin'に除外を使用しました)を拭くのを避けるために私のものよりもエレガントですが、' swagger-codegen-maven-plugin'は'* Impl.java'ファイルを生成します。 – lpacheco

+0

はい、implクラスは生成されません。私は今すぐ視野にファイルを持っていませんが、もし私が間違っていないなら、私は '**/Impl.java'を設定しました – Xendar

関連する問題