flatten-maven-plugin を使用して Maven プロジェクトのバージョン管理を簡素化した経験

会社概要

1Cではプラットフォームを開発するだけではありません 1C: エンタープライズ на C ++ и JavaScriptをだけでなく、Java アプリケーション、特に新しい開発環境も同様です。 エンタープライズ開発ツール Eclipse とプラットフォームに深く統合されたメッセンジャー サーバーに基づいています - インタラクションシステム.

エントリー

私たちは Java アプリケーションのビルド システムとして Maven をよく使用します。この短い記事では、開発を組織する過程で直面しなければならなかった問題の XNUMX つと、この問題を克服するためのアプローチについて話したいと思います。問題。

前提条件とワークフロー

Maven プロジェクトの開発の特殊性により、非常に多くのモジュール、依存関係、子プロジェクトを使用します。 XNUMX つのツリー内の pom ファイルの数は数十、場合によっては数百にもなります。

flatten-maven-plugin を使用して Maven プロジェクトのバージョン管理を簡素化した経験

「大したことはない、彼らは一度作成しただけで忘れてしまったのだ」と思われるでしょう。 すべてのファイルを一度に変更または追加する必要がある場合は、エディターや IDE に便利なツールがたくさんあります。 pom.xml に対する最も一般的な定期的な変更は何ですか? プロジェクトのバージョンと依存関係が変更されると考えられます。 おそらくこれに反論したい人もいるでしょうが、これがまさに私たちの状況です。 その理由は、カーネルとともに多くの独自のライブラリを同時に開発しており、ビルドとテストの結果を常に再現するためには、スナップショットの使用が便利なアプローチとは思えないという事実にあります。 このため、ビルドごとにプロジェクト内のバージョン番号を上げる必要があります。

また、開発者はライブラリの独自のブランチを構築し、その機能をすべての依存関係に対してチェックする必要がある場合があり、そのためにはすべての依存関係のバージョンを手動で変更する必要があります。

初期の解決策

このように頻繁に複数のバージョンが変更されるため、CI 内のプロセスを簡素化および自動化したいと考えています。 ここで、便利でよく知られたプラグインが役に立ちます。 バージョン-maven-プラグイン - 接続して起動します

mvn -N バージョン:set -DnewVersion=2.0.1

そして Maven はすべてを正常に実行します。階層を上から下まで実行し、すべてのバージョンを置き換えます。素晴らしいことです。 あとはプル リクエストを送信するだけです。同僚が変更をレビューし、あなたはすぐにトランクに参加できます。 素早く? たとえそれがどのようなものであっても。 数百 pom.xml レビュー用です。コードはカウントされません。 さらに、このような多数の変更されたファイルによるマージ競合から安全に過ごせる人は誰もいません。 ここで、CI プロセスでは、バージョンの変更は機能の変更とともに自動的に発生し、個別に発生するわけではないことに注意してください。

新機能

しばらくの間、私たちは落ち着いて、あきらめて、彼らが来るまでそのように暮らしました。 Maven Apache プロジェクト バージョン 3.5.0-beta-1 以降、Maven にはいわゆる「プレースホルダー」のサポートが含まれていませんでした。 これらの代替品の本質は、 pom.xml プロジェクトのバージョンを特定する代わりに、変数が使用されます。 ${リビジョン}, ${sha1} и ${変更リスト}。 これらのプロパティ自体の値は、要素内で設定されます。プロパティ>、またはシステム プロパティを通じて定義できます。

mvn -Drevision=2.0.0 クリーンパッケージ

システムプロパティ値は、で定義された値よりも優先されます。プロパティ>.



  4.0.0
  
    org.apache
    アパッチ
    18
  
  org.apache.maven.ci
  親の親
  初めての CI フレンドリー
  ${改訂}${sha1}${変更リスト}
  ...
  
    1.3.1
    -スナップショット
    
  


子孫

  4.0.0
  
    org.apache.maven.ci
    親の親
    ${改訂}${sha1}${変更リスト}
  
  org.apache.maven.ci
  シ子
   ...

バージョン 2.0.0-SNAPSHOT をビルドしたい場合は、次のようにしてください。

    mvn -Drevision=2.0.0 クリーンパッケージ

リリースしたい場合は、スナップショットをリセットしてください

    mvn -Dchangelist= クリーンなパッケージ

*上記の例は以下から抜粋したものです 記事 Maven Apache プロジェクト Web サイト上

厳しい現実

すべてが順調で健康的で、満足感を感じる時期ですが、そうではありません。 この方法は、リポジトリで公開されているアーティファクトの説明では置き換えられないため、インストールとデプロイには機能しないことが判明しました。 ${リビジョン} その意味を理解していない場合、Maven はそれが何であるかを理解できなくなります。


    org.apache
    アパッチ
    ${リビジョン}

トンネルの終わりの光

私たちは問題の解決策を探す必要があります。 状況を救えたかもしれない flatten-maven-プラグイン。 このプラグインは、pom 内のすべての変数を解決しますが、同時に、アセンブリ中にのみ必要で、パブリッシュされたアーティファクトを他のプロジェクトにインポートする場合には必要のない、他の多くの情報を削除します。 また、このプラグインはすべての親子依存関係を「整理」し、その結果、必要なものがすべて含まれたフラットな pom が得られます。 不便だったのは、「余分な部分」がカットされすぎて、私たちにはまったく合わなかったことです。 このプラグインの開発に関する情報を調べた結果、宇宙にいるのは私たちだけではないことがわかり、2018 年 1.1.0 月に、これを可能にするという願いを込めて、Github のプラグイン リポジトリにプルリクエストが作成されました。 pom.xml を「壊す」方法を独自に決定します。 開発者は苦しんでいる人々の声に耳を傾け、すでに XNUMX 月に新しいバージョン XNUMX がリリースされ、これまで以上に適切な新しいモード、resolveCiFriendliesOnly が flatten-maven-plugin に登場しました。 pom.xml 要素を除いてそのまま そして許可します ${リビジョン}, ${sha1} и ${変更リスト}.

プロジェクトにプラグインを追加する


  
    org.codehaus.mojo
    flatten-maven-プラグイン
    1.1.0
    
      真実
      解決CiFriendliesOnly
    
    
      
        平らにする
        プロセスリソース
        
          平らにする
        
      
      
        平らにする.きれいにする
        クリーン
        
          クリーン
        
      
    
  

完了!

ハッピーエンド

今後、プロジェクト全体のバージョンを変更し、それをすべての依存関係に知らせるには、要素を編集するだけで済みます。リビジョン> 根元だけで pom.xml。 同じ変更が加えられたファイルが XNUMX 個や XNUMX 個ではなく、XNUMX 個だけレビューに届きます。 まあ、使う必要はないけどね バージョン-maven-プラグイン.

出所: habr.com

コメントを追加します