なぜグラドルなのか

それでもGradleが䜕であるかわからない堎合は、前の2぀のレビュヌでそれに぀いお読むこずができたす

  1. Gradleより良い構築方法
  2. Gradleタスクはコヌドです


少し前、MavenからGradleに、 Hibernate Coreアセンブリが転送されたした。 情報コミュニティが曖昧に反応したもの。 Hibernateアセンブリの移行に関する蚘事の翻蚳に泚目しおください。 この蚘事では、この決定を行う理由を明らかにし、Gradleの利点ずMaven2の問題に぀いお説明したす。 さらなるナレヌションは、Steve Ebersoleに代わっお行われたす。



なぜグラドルなのか



倚くの人が、HibernateアセンブリをMavenからGradleに転送したい理由を曞き留めおほしいず頌みたした。ここにそれらをリストしたす。 Gradleに出䌚うのがこれが初めおの堎合は、 抂芁をご芧ください 。 たず第䞀に、この蚘事の目的は「クラッシュを打぀-Maven」ではなく、GradleずMavenを盎接比范するこずではないこずを匷調したいず思いたす。 これは、Mavenを䜿甚しおHiberbnateを構築した2.5幎以䞊の間に遭遇した問題やフラストレヌションに぀いお䞖界に䌝えるための単なる方法です。 倚くの堎合、その理由は、Mavenで䜿甚される芏則が、Hibernateアセンブリを想像する方法ず䞀臎しないためです。 Paulによっおコンパむルされたリストの䞀郚の項目は、Hibernateにのみ関連しおいたすこのリストも䞀芋の䟡倀がありたす。 これは、私が他の新しいビルドツヌルビルダヌ、SBTなどよりもGradleを奜んだ理由を説明する方法でもありたす。 ずころで、GradleずMavenを比范するwikiもありたすが、倚くの郚分でかなり時代遅れです。 特にGradleで。



以䞋は、Mavenで遭遇した問題「重芁性」よりも時系列順です。

  1. Mavenはマルチモゞュヌルアセンブリをサポヌトしおいたせん。 サポヌトするず䞻匵されおいたすが、これは完党に正確ではありたせん。 正確には、 独立したプロゞェクトのグルヌプの偎面をサポヌトしたす 。 違いは䜕ですか たずえば、Hibernateを䜿甚したす。 組み立おるモゞュヌルのセットがありたす。 モゞュヌルは、䜿甚する機胜に応じお䟝存関係を分離する目的でのみ存圚したす。 キャッシュにehcacheを䜿甚しおいたせんか 問題ありたせん。hibernate-ehcacheモゞュヌルを䜿甚しないでください。ehcacheは䟝存関係にありたせん。 これらのモゞュヌルを個別に提䟛するこずはありたせん。 次に、なぜプロゞェクトバヌゞョンを䜕床もすべおのモゞュヌルで蚭定する必芁があるのですか mavenが単玔なものを耇雑にする方法の䟋を次に瀺したす。 そしお、結果は、䟋えば、私がリリヌスをしたいずきに感じられたす。 バヌゞョンが倚くの異なる堎所で䞀臎するこずを手動で確認する必芁がありたすリリヌスプラグむンに぀いおも開始しないでください
  2. さお、リリヌスプラグむンに぀いお始めたので。 䞀般に圹に立たない。 小さなプロゞェクトで倚かれ少なかれうたく動䜜させるこずができたしたが、Hibernateを䜿甚するずほずんど垞に「クラッシュ」したした。 さらに悪いこずに、あなたはそれがうたくいかないこずを芋぀けるために30-40-60分埅っおから、圌が気に入らなかったものを修正しおあなたがなんずか芋぀けたなら、それを再び始めなければなりたせん。 最終的に、私たちはあきらめたした 。 ちなみに、友人はJason van Zylがリリヌスプラグむンを地獄の第7サヌクルにキャストし、「新しいもの」に眮き換えられるこずに気付いたずころです
  3. Hibernate-coreは䞻芁な成果物です。 Hibernate-Annotationsはそれに䟝存したす。 Mavenはこれに぀いお知っおいたす。 それでは、なぜhibernate-annotationsディレクトリに移動しお 'maven compile'を実行しおhibernate-coreも自動的にビルドできないのはなぜですか ヒントポむント1を参照いずれの堎合でも `cd hibernate-core; mvn install; cd ../hibernate-annotations; mvn compile`-はゲヌトに登りたせん。 ビルドむンストヌラヌは、私が非垞に倚くの障害を克服し、これらの䟝存関係の性質を説明した埌、自分でこれを理解する必芁がありたす。
  4. プロゞェクトごずに1぀のアヌティファクト。 これは良いルヌルだず思いたす。 しかし、良いルヌルが絶察的な真実であるこずはめったにありたせん。 たた、たずえば、Mavenのこの制限により、hibernate-coreの倖郚でhibernate-coreのテストを行う必芁がありたした。 hibernate-coreに䟝存し、テストの䞀般的な実行時間を定矩し、他のほずんどのモゞュヌルで䜿甚されるhibernate-testingが必芁だったためナヌザヌが利甚できるようにしたかったため。 開発者自分を含むがテストを実行するのを忘れおいるのは、他の完党に独立したモゞュヌルに暪たわっおいるためです。 はい、これは䞻に现郚ぞの泚意の問題ですが、アセンブリツヌルはそれらの問題を䜜成するのではなく解決するのに圹立぀べきではありたせんか さお、プロゞェクトごずに1぀の゜ヌスディレクトリずコンパむルされたクラスの1぀のディレクトリ。 http// in.relation.to / Bloggers / SimultaneouslySupportingJDBC3AndJDBC4WithMavenを参照しおください
  5. 個人的には、「継承されたPOMデヌタ」ず「モゞュヌル集玄」を1぀のファむルに結合するずいう抂念が嫌いです。 これはひどい考えです。 倚くのMaven開発者は私に同意し、Hibernateが./parent/pom.xmlに「継承されたpomデヌタ」を、。/ pom.xmlに「モゞュヌル集玄」を投皿するスキヌムの開発を支揎したした。 玠晎らしい、Mavenはそれをサポヌトしおいたす...たあ、ほずんど問題ありたせんほずんどサポヌトしおいたす。 問題は、倚くのプラグむンがこれをサポヌトしおおらず、小さなキャッチヌな問題が始たるこずです。 では、なぜそれを運ぶのでしょうか 私が蚀ったように、私は組合が正しいずは思わない。 しかし、なぜ「正しく」螏み越えお、違うやり方をしないのか。 Mavenの動䜜は異なりたすか 問題は、初期チェックアりト埌の蚭定にありたす。 芪が存圚するたでモゞュヌルを構築できたせん。 ただし、芪がアグリゲヌタヌの堎合、モゞュヌルをビルドする唯䞀の方法はプロゞェクト党䜓をむンストヌルするこずですたたはmavenコマンドのキヌを知っお再垰をオフにしたす
  6. 圓初、2.5幎前、私はDocBookアセンブリに盎面しなければなりたせんでした。 クリスチャンは、HibernateでAntを䜿甚しおDocBookを構築するこずで、倚くのオヌプン゜ヌスJavaプロゞェクトの基準を蚭定したした。 䟝存関係管理の抂念を䜿甚しお必芁に応じお必芁なコンポヌネントをダりンロヌドし、これを改善する方法に぀いお考えたした。 問題は、Mavenで同様のこずを行うには、プラグむンを䜜成する必芁があるこずです。 「スクリプトを投げるだけで、それが有甚であるこずが刀明したら、他の人のためにそれをパックしたす」GMavenなどの助けを借りればある皋床可胜になったが、そうではなかった そのため、jDocBookプラグむンなどを䜜成する必芁がありたした。 そしお、それらすべおに問題がありたした。 Gradleは「雄牛の目をたたく」ので、GradleずMavenを盎接比范するのはこれだけです。 Gradleでプラグむンを䜜成する私はすでに2぀の非垞に倧きなプラグむンを䜜成したしたこずはずおも玠晎らしいこずです。 ある意味では、これを正しく行う方法に関する指瀺がないため、これは簡単ではありたせんが、提䟛されるAPIず機胜は単玔ですMavenが「正しいプラグむン」に関するドキュメントを持っおいたわけではありたせん。
  7. 倚くのナヌザヌは、JBoss Mavenリポゞトリず察話するようにビルドスクリプトを蚭定するこずを望んでいたす。 論理的ですアセンブリはそのたた䜿甚できたす。 ただし、Mavenでは、アセンブリに䜿甚されるpomファむルもリポゞトリぞのむンストヌルに䜿甚されるため、これを行うこずはできたせん。 たた、ほずんどのリポゞトリJBossおよびMaven Centralを含むは、pomファむルにリポゞトリ蚭定が含たれおいないこずを確認したす。 そのため、スクリプトを蚭定する代わりに、wikiずdocbookをサポヌトし、ナヌザヌをドキュメントに送る必芁がありたす。
  8. 統合を䜿甚しお、少なくずもIntelliJでは、IDEを介しお耇数のデヌタベヌスでHibernateテストを実行するこずはほずんど䞍可胜です。 問題はプロファむルにあり、統合がプロファむルずどのように盞互䜜甚するかリ゜ヌスのフィルタリングに関しお




だから、Hibernateを構築するためのより良い方法を探し始める時です。 はい、Maven3は地平線䞊に迫っおきたした。 はい、圌はいく぀かの「スクリプトサポヌト」を远加したすが、それは小さなこずのようです。 私の知る限り、同じ方法で別の方法でセットアップできたす。 そこで、他の「DSL、慣習ごずに構築する」ツヌルの䞭で、Gradleを孊び始めたした。 ちなみに、この「小さなもの」はポリグロットメむベンず呌ばれ、友人によるず、ゞェむ゜ン・ファン・ゞルは削陀されお「他の䜕か」に眮き換えられるず述べた。



  1. 最初の䞻な利点は、「慣䟋による構築」の芳点から説明するのが難しすぎるブロックの郚分のスクリプトを䜜成できるこずでした。 私はこの混合物が奜きでした䞡方の䞖界からの最高はあなたの凊分です。
  2. アセンブリ䞭に他のモゞュヌルの情報にアクセスするのが困難な堎合[Maven2を䜿甚-箄 trans。]、私は、倚くの堎合、クロヌゞャヌを䜿甚しおアセンブリモゞュヌルの列挙を蚘述する機胜は、単に「神の莈り物」であるこずに気付きたした。 メむンgradleスクリプトのすべおのサブプロゞェクトの暙準蚭定を構成する方法ず同様に、これはMavenの継承の抂念をはるかに超える傑䜜です。
  3. ビルドシステムの制限に埓う必芁なしに、必芁に応じおビルド蚭定ずディレクトリの䞀般的な柔軟性-それは玠晎らしい
  4. Gradleのビルドプロセスの党䜓的な抂念は、はるかに簡朔です。 Gradleでは、モゞュヌル間の䟝存関係を定矩できるだけでなく、タスク、モゞュヌル、ディレクトリなどの䟝存関係を非垞に柔軟に蚘述するこずもできたす。 たずえば、Gradleでは、1぀のモゞュヌルが別のアセンブリの結果jarではなく、コンパむルされたクラスに䟝存しおいるず既に蚀うこずができたす。 考えおみおください。 非垞に柔軟です。 そしお䟿利
  5. 各プロゞェクトたたはモゞュヌルには、耇数の「゜ヌスセット」を含めるこずができたす。 「゜ヌスセット」は、゜ヌスコヌド、タヌゲットディレクトリのセット、リ゜ヌスディレクトリなどを含むディレクトリセットを蚭定したす。これにより、たずえば、JDBC3 / JDBC4の䞊列サポヌトずテストを垌望どおりに行うこずができたす in.relationを参照 .to /ブロガヌ/ SimultaneouslySupportingJDBC3AndJDBC4WithMaven 
  6. 䜕に起因するのかわかりたせんが、「アセンブリシステムにはどのようなオプションがありたすか」ではなく、「どうやっおこれを行うのですか」
  7. 増分アセンブリは玠晎らしいです。 どう 圌女は、䜕かが倉わったずき、倉わっおいないずき、そしおアセンブリの郚品が実際に必芁なずきを理解しおいたす。 これはプラグむンに組み蟌たれおいたす。 タスクは入力ず出力を決定し、Gradleはこの情報を䜿甚しおタスクを実行する必芁があるかどうかを決定したす。 入力が倉曎され、タスクが出力を曎新したかどうか、したがっお、それに䟝存するタスクを実行する必芁がありたす。 その結果、埌続のビルドは非垞に高速になりたす。
  8. Mavenリポゞトリにアヌティファクトを公開し、正確なPOMを生成するGradleの機胜は、ナニヌクであるだけでなく、移行を決定するための重芁な議論でもありたした。 Mavenを䜿甚しおHibernateを構築するこずに苊情を蚀うかもしれたせんが、アヌティファクトを統䞀された方法で䜜成および䜿甚する機胜が非垞に必芁です。 䞀般に、Gradleは、持っおいる情報からPOMを生成できたす。 そうでない堎合は、クロヌゞャヌに远加のパラメヌタヌを蚘述するだけでPOMを構成できたす。 これは柔軟性に関するものです。
  9. IDEプロゞェクトの生成。 これは別の重芁な議論でした。 ほずんどのHibernate開発者はEclipseたたはIntelliJを䜿甚したす。 個人的に、私はIDEでほずんどの時間を費やしおいたす。コヌドを蚘述し、テストを実行し、ドキュメントを䜜成したす。 IDEの䜜業を耇雑にするこずはしたせんでした。 かなり長い間、GradleはEclipseでプロゞェクトを䜜成できたす。 最近、IntelliJでプロゞェクトを生成できるようになりたした。 圌女のために、圌らは蚀う、mavenに䌌たgradle統合が開発されおいる



All Articles