Lazybones Project-あなたのために働く「Lazybones」

私はMavenが好きではありません。

このことに対する私の情熱的な憎しみについて複数の記事を書くことができますが、今日はMavenの非常に優れた機能の1つ、つまりアーキタイプについてお話したいと思います。 公式ドキュメント 、Maven onHabréの各チュートリアル( 1、2、3 )で読むことができるのは何ですか?実際、おそらくあなたは自分自身を知っているでしょう。



したがって、アーキタイプはクールであり、1)標準構造を持つ多くのプロジェクトに含まれていれば素晴らしいことです。 2)持っていない人に固定することは可能です。



それが、 Peter LedbrookRatpackにアーキタイプの完全な欠如を見たときに考えたものです。 その後、プロジェクトを生成するツールであるLazybonesプロジェクトが誕生しました。



画像



この記事では、1)Lazybonesを使用して、テンプレートが既に作成されているプロジェクトを生成する方法を説明します。 2)プロジェクト用の新しいテンプレートを作成します。



既存のLazybonesテンプレートの使用


その後、すべてが非常に短くなります。

  1. GVMを使用してLazybonesをインストールするか、 Bintrayから配布パッケージをダウンロードします
  2. lazybones list



    コマンドでどのパターンが存在するかを調べます(またはリポジトリを調べます
  3. lazybones info < >



    コマンドを使用して、選択したテンプレートに関する情報を調べます(またはBintrayのテンプレートのpackag-eのreadmeを読みます)
  4. コマンドlazybones create < > < > < >



    を使用してプロジェクトを作成lazybones create < > < > < >





それだけです。注意してくれてありがとう、みんな無料です。 いいえ、しかし今は面白いだけを行います。



独自のプロジェクトテンプレートを作成する


#361 Mavenアーキタイプmaven-archetype-quickstart )に精通している可能性が高いため、同様のことを行います(すべての機能を再作成したため、繰り返しを省略します)。

ダウンロードしたインターネットの数を比較して両方のプロジェクトを作成できるだけでなく、テンプレート自体の作成の複雑さも比較できます 。これは、Mavenアーキタイプの作成プロセスがここで完全に説明されているためです。



行きましょう。


私たちが達成したいこと:





  1. テンプレートを作成するには、Gradleスクリプトとテンプレートのあるディレクトリが必要です。 レイジーすぎるので、レイジーボーンを実行します。

    >lazybones create lazybones-project lzb-templates





    その結果、次のことができます。



     │build.gradle //チャルボンビルドスクリプト
     │gradlew // nyxのスクリプト起動ファイル
     │gradlew.bat // Windows用のスクリプト起動ファイル
     │README.md //このプロジェクトを説明するファイル
     │
     ├───gradle//スクリプトの補助ディレクトリ
     │
     └───templates//テンプレートの空のディレクトリ
    


  2. templates



    ディレクトリに移動し、その中にtemplates



    のサブディレクトリを作成し、スカルプトを開始します。 バージョンファイルを作成します。 これはVERSION



    と呼ばれ、バージョンのみ(0.1など)が含まれます



     > mkdir maven-simple
     > cd maven simple
     > echo 0.1>バージョン
    


  3. さらに、プロジェクトの作成後に表示されるreadme.md



    を作成する必要があります。
  4. src/main/java



    src/main/resources



    ディレクトリを作成します。 java



    およびそれらからのresources



    では、空の.retain



    ファイルを配置します



     ├───maven-simple
     ││README.md
     ││バージョン
     ││
     │└───src
     │└───メイン
     │├───java
     ││.retain
     ││
     │└───リソース
     │.retain
    


  5. ここで、テンプレートの世話をしましょう。 pom.xmlから始めましょう。

     <project> <modelVersion>4.0.0</modelVersion> <groupId>${groupId}</groupId> <artifactId>${artifactId}</artifactId> <version>${version}</version> <build> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>1.2.1</version> <executions> <execution> <phase>test</phase> <goals> <goal>java</goal> </goals> <configuration> <mainClass>${pkg}.App</mainClass> <arguments> <argument>${message}</argument> </arguments> </configuration> </execution> </executions> </plugin> </plugins> </build> </project>
          
          





    AAAAA !!!!!!!
    それで、一緒になって、見てください。 あらゆる種類の${...}



    注意してください。 これは、 create



    実行時にユーザーが求める値に変更するものです。 本質的に、これらは単なるGroovyテンプレートトークンです。 Velocity、Freemarker、またはその他のテンプレートハンドラーに精通している場合は、すべてに精通しているでしょう。 しかし、それについては後で。

    Hellfire inは、 App



    main



    クラスの単なる起動です。 このクラスのpackage



    main



    に渡すパラメーターをまだ認識していないことに注意してください。
  6. App.java



    ファイルを見てください:

     package ${pkg}; public class App { public static void main(String[] args) { System.out.println(args[0]); } }
          
          





    ここでは、変数が1つだけあります-ここでもpackage



    です。 同時に、mainが引数を出力することがわかります。 これは、テスト段階でMavenの起動中に、ユーザーがcreate



    間に選択したメッセージが表示されることを期待していることを意味しcreate





    これで、すべてのディレクトリとテンプレートができました。

     │App.java
     │lazybones.groovy
     │pom.xml
     │README.md
     │バージョン
     │
     └───src
         └───メイン
             ├───java
             │.retain
             │
             └───リソース
                    保持する
    


  7. そして今、楽しみが始まります。 ディレクトリを解凍した後に実行するポストプロセッサを記述することは残ります。 タスク:1)ユーザーが必要とするすべてのものを見つける、2)パッケージに対応するディレクトリにjavaファイルを転送する、3)テンプレートを処理する。

    もちろん、エレガントなGrooveスクリプトはこれに役立ちます。

     import static org.apache.commons.io.FileUtils.moveFileToDirectory Map<String,String> props = [:] // ask  2  - ,    . //     .  (   ,   ) . props.groupId = ask(' groupId [org.example]: ', 'org.example') props.artifactId = ask(' artifactId [maven-simple]: ', 'maven-simple') props.version = ask('  [1.0-SNAPSHOT]: ', '1.0-SNAPSHOT') props.pkg = ask(" package   [$props.groupId]:", props.groupId) props.message = ask('   ? ', ', !') // processTemplates  ,     . processTemplates 'pom.xml', props //    String packageDir = props.pkg.replaceAll(/\./, '/') //     moveFileToDirectory(new File(targetDir, 'App.java'), new File(targetDir, "src/main/java/$packageDir"), true) //  processTemplates 'src/main/java/**/App.java', props
          
          





    コメントが、何が起こっているのかを非常に明確に説明することを願っています。 おそらく追加する必要があるのは、 ask()



    およびprocessTemplates()



    メソッドとprocessTemplates()



    フィールドが、このスクリプトのカスタムスーパークラスであるuk.co.cacoethes.lazybones.LazybonesScript



    クラスからスクリプトに入ることです。
  8. 収集する時間です。 Lazybonesには、ステップ1で生成したビルドスクリプトで既に構成されているGradle用の独自のプラグインがあります。このプラグインは、ビルド、ローカルキャッシュへのインストール、およびBintrayへのテンプレートの展開のタスクルールを定義します 。 テンプレートは深刻ではないため、Bintrayには配置しませんが、キャッシュにインストールして実行する必要があります。 アセンブリを開始します。

    >gradlew installTemplateMavenSimple





    :packageTemplateMavenSimple





    :installTemplateMavenSimple







    BUILD SUCCESSFUL





  9. テスト中! 新しいディレクトリを作成し、その中のテンプレートからプロジェクトを作成します(すでに見たように)。

    >lazybones create maven-simple 0.1 maven-simple







    Creating project from template maven-simple 0.1 in 'maven-simple'





    groupId [org.example]: com.demo





    artifactId [maven-simple]:





    [1.0-SNAPSHOT]: 0.1





    package [org.example]:org.simple





    ? , !







    -





    ---------------------------------





    . ? .







    Project created in maven-simple!







    最後のメッセージは、もちろんreadme.md



    からreadme.md



    ます。 デフォルトではmaven-simple



    想定して、 artifactId



    指定しなかったことに注意してください。

    maven-simpleディレクトリに移動して、感心します。

     │pom.xml
     │README.md
     │
     └───src
         └───メイン
             ├───java
             │└───org
             │└───シンプル
             │App.java
             │
             └───リソース
    


    pom.xmlを開きます。

     <project> <modelVersion>4.0.0</modelVersion> <groupId>com.demo</groupId> <artifactId>maven-simple</artifactId> <version>0.1</version> <build> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>1.2.1</version> <executions> <execution> <phase>test</phase> <goals> <goal>java</goal> </goals> <configuration> <mainClass>org.simple.App</mainClass> <arguments> <argument>, !</argument> </arguments> </configuration> </execution> </executions> </plugin> </plugins> </build> </project>
          
          





    すべてがそうであるように。 App.javaを開きます。

     package org.simple; public class App { public static void main(String[] args) { System.out.println(args[0]); } }
          
          





    同じ順序。 Mavenを起動します。

     > mvnテスト
     [情報]プロジェクトをスキャンしています...
     [情報]
     [情報] ----------------------------------------------- -------------------------
     [情報] maven-simple 0.1の構築
     [情報] ----------------------------------------------- -------------------------
     [情報]
     [情報] --- maven-resources-plugin:2.6:リソース(デフォルトリソース)@ maven-simple ---
     [情報] 0個のリソースをコピーしています
     [情報]
     [情報] --- maven-compiler-plugin:2.5.1:compile(default-compile)@ maven-simple ---
     [情報]コンパイルするものはありません-すべてのクラスが最新です
     [情報]
     [情報] --- maven-resources-plugin:2.6:testResources(default-testResources)@ maven-simple ---
     [情報]
     [情報] --- maven-compiler-plugin:2.5.1:testCompile(default-testCompile)@ maven-simple ---
     [情報]コンパイルするソースがありません
     [情報]
     [情報] --- maven-surefire-plugin:2.12.4:test(default-test)@ maven-simple ---
     [情報]実行するテストはありません。
     [情報]
     [情報] >>> exec-maven-plugin:1.2.1:java(デフォルト)@ maven-simple >>>
     [情報]
     [情報] <<< exec-maven-plugin:1.2.1:java(デフォルト)@ maven-simple <<<
     [情報]
     [情報] --- exec-maven-plugin:1.2.1:java(デフォルト)@ maven-simple ---
    こんにちは、Habr!
     [情報] ----------------------------------------------- -------------------------
     [情報]成功の構築
     [情報] ----------------------------------------------- -------------------------
     [情報]合計時間:0.768秒
     [情報]終了日:2014年4月4日金02:54:57 IDT 2014
     [情報]最終メモリ:7M / 304M
     [情報] ----------------------------------------------- -------------------------
    




以上です。 テンプレートからプロジェクトを作成することと、Lazybonesでテンプレート自体を作成することの両方が、シンプルさと優雅さに染み込んでいることを願っています。 これらの単純さと恵みのために、Grooveyに感謝することは多くの点で必要であるように思えます。



恥知らずなPR、あなたは読むことができません
あなたが好きで、優雅さとシンプルさの理由で私に同意し、あなたが少しGrooveを学びたいなら、4月15日にカザンで 、または4月17日にモスクワで私のトレーニング来てください。 Groovyパンを教えることを約束します。




All Articles