Mavenでアーキタイプとディレクトリを作成する

かなり長い間(約1年間実行しています)、Apache Mavenビルドシステムを積極的に使用してきましたが、非常に満足しています。 明らかな欠点であり、それほど欠点ではありませんが、紛れもない利点は、依存関係の自動管理、優れた構造化プロジェクト、ビルドスクリプト自体の欠如、およびそれらの問題です。

多くの人は、Mavenが実際に開発者のプロジェクト構造の選択の自由を奪い、それを直接決定するという事実を好まないかもしれませんが、この自由はそれに対して大胆な議論をするほど重要です。 そうは思いません 私の意見では、他のより深刻な欠点、そもそも欠点があります-アセンブリ中の問題の診断の難しさと、Mavenとプラグインの不十分なドキュメントです。

プロジェクトの中で、チームの新しいメンバーがビルドを組み立てることができなかったケースがありました。2時間の掘削の後、Javaの5番目のバージョンがメインバージョンとして釘付けになったが、インストールされていなかったというわかりにくい結論を受け取りました。

プラグインを見つけて設定することも地獄の苦痛の輪ですが、ant'eでのXMLプログラミングと比較すると、これはまだ何もありません。

しかし、適切なアプローチと十分なスキルを備えているため、仕事でMavenを感じることはほとんどありません。

実際、この記事では、苦しみについてではなく、アーキタイプ、そのカタログ、および独自のアーキタイプとカタログの作成について説明します。
これらのシンプルなコンセプトを活用することで、新しいプロジェクトを作成する際の生活を大幅に簡素化できます。

ローカルディレクトリを作成する



Maven のアーキタイプは、ソースファイルと構成ファイルの構造とレイアウトを含む、新しいプロジェクトのテンプレートです。

少なくとも一度Mavenでプロジェクトを作成したことがある人は誰でも、アーキタイプに出くわしました。 たとえば、インターネット上にあるプロジェクトを作成する一般的な方法は次のとおりです。

	 mvnアーキタイプ:作成\
	   -DarchetypeGroupId = <archetype-groupId> \
	   -DarchetypeArtifactId = <archetype-artifactId> \
	   -DarchetypeVersion = <archetype-version> \
	   -DgroupId = <my-groupid> \
	   -DartifactId = <my-artifactId>
	


必要なパラメーターをどこで取得するかという質問は、常に私を心配させました。通常、私は丁寧にGoogleに尋ね、彼は通常私に答えます

たとえば、単純なアプリケーションを作成する場合は、次のようにmaven-archetype-quickstartというアーキタイプを使用します。

	 mvnアーキタイプ:作成\
	   -DarchetypeGroupId = org.apache.maven.archetypes \
	   -DarchetypeArtifactId = maven-archetype-quickstart \
	   -DarchetypeVersion = 1.0 \
	   -DgroupId = org.example \
	   -DartifactId = simpleapp
	

アーキタイプを使用してプロジェクトを作成するより便利な方法があります:ターゲットを生成します。 対話モードで呼び出されると、新しいプロジェクトのパラメーターを入力するように求められます。

  mvnアーキタイプ:生成 


しかし、問題があります。 Mavenは、既製のテンプレートのリストから新しいプロジェクトのタイプを選択することを提案します。リストには、300を超えるオプションがあります。 適切なテンプレートを見つけるのはかなり重要なタスクです。通常、出力をファイルにダンプしてから、必要なものをグレープで探します。

少しグーグルで、私はこの問題の解決策を自分で見つけました。最終的なものではなく、かなり優雅なヒントです。 アーキタイプはカタログに結合できます! しかし、これはどのように役立ちますか?

ディレクトリーは、それが置かれているURLによって決定されます。mavenに加えて、3つの事前定義されたディレクトリーがあります。

内部Mavenに組み込まれたアーキタイプが含まれ、それらの数は少なく、ディストリビューション自体にすでに事実上来ています
リモートhttp://repo1.maven.org/maven2/archetype-catalog.xmlにあるmaven中央ディレクトリ。その場所は、Mavenの現在の設定によって異なります。たとえば、このURLをリポジトリミラーの1つに再定義できます。
地元の通常は〜/ .m2 / archetype-catalog.xmlにあるローカルリポジトリのディレクトリ


archetype:generateターゲットにはarchetypeCatalogパラメーターがあり、これを使用して、可能なアーキタイプを探すディレクトリのリストを指定できます。 デフォルトでは、パラメータの値は「リモート、ローカル」です。 ただし、そこからリモートを削除すると、ほぼ必要なものが得られます。

たとえば、次のように:

	 grim @ blackbox:〜/ projects $ mvn archetype:generate -DarchetypeCatalog = local

	 [...乾杯...]

	アーキタイプを選択してください:
	 1:ローカル-> maven-archetype-quickstart(クイックスタート)
	 2:ローカル-> maven-archetype-archetype(アーキタイプ)
	 3:ローカル-> maven-archetype-webapp(webapp)
	番号を選択してください:1:
	


リモートディレクトリからファイル構造を見ることができます。 たとえば、上記のリストを取得するには、ファイルは次のようになります

<?xml version="1.0" encoding="UTF-8"?> <archetype-catalog xsi:schemaLocation="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-catalog/1.0.0 http://maven.apache.org/xsd/archetype-catalog-1.0.0.xsd" xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-catalog/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <archetypes> <archetype> <groupId>org.apache.maven.archetypes</groupId> <artifactId>maven-archetype-quickstart</artifactId> <version>1.1</version> <description>quickstart</description> </archetype> <archetype> <groupId>org.apache.maven.archetypes</groupId> <artifactId>maven-archetype-archetype</artifactId> <version>1.0</version> <description>archetype</description> </archetype> <archetype> <groupId>org.apache.maven.archetypes</groupId> <artifactId>maven-archetype-webapp</artifactId> <version>1.0</version> <description>webapp</description> </archetype> </archetypes> </archetype-catalog> 


Mavenの構成を少し活用して、この状況を永続的にすることができます; archetypeCatalog変数の値を設定するプロファイルを作成する必要があります。 これを行うには、settings.xmlファイルに追加します

  <profiles> <profile> <id>dev</id> <activation> <activeByDefault>true</activeByDefault> </activation> <properties> <archetypeCatalog>local</archetypeCatalog> </properties> </profile> </profiles> 


口ひげ! さて、呼び出されたとき、アーキタイプの目標は、大量のゴミの代わりに生成することで、あなたの言うことを表示することです。

ところで、アーキタイププラグインには奇妙なクロールターゲットがあり、ローカルリポジトリをスキャンしてアーキタイプを見つけ、見つかったすべてのものからディレクトリを生成します。 残念ながら、ドキュメントは少し横たわっており、デフォルトでは、ファイルはmavenが表示されるはずの場所ではまったく生成されません。 次のように料理する必要があります。

	 grim @ blackbox:〜/ projects $ mvn archetype:crawl -Dcatalog =〜/ .m2 / archetype-catalog.xml
	

公式のドキュメントとは異なり、パラメーターはcatalogFileではなく、catalogと呼ばれます。

アーキタイプを作成する



検討する2番目の問題は、独自のアーキタイプの作成です。 なぜこれが必要なのですか? これは、見かけの豊富なすべてのアーキタイプでは、単純なWeb開発には適していないという単純な理由で必要です。 同じmaven-archetype-webappなど、類似したものがいくつかありますが、その記述子は古く、log4jと通常のjspテンプレートはありません。 全体として、空のプロジェクトを作成した後、ファイルモードに切り替えて、Googleを使用して必要なすべてをやり直す必要があります。 結局、10回目にはうんざりしていたので、自分のアーキタイプを作成することにしました。 より具体的には、サーブレット2.5 / JSP 2.1 / JSTL 1.2とすぐに使用できるロギングを使用して、単純なspring-mvcアプリケーションのブランクを作成します。

注意、次の段落で、それはアーキタイプという言葉への参照の数に依存するかもしれません。

まず、maven-archetype-archetypeアーキタイプを使用して、たとえば同じアーキタイプを使用して、アーキタイプのプロジェクトを作成する必要があります:create。

	 grim @ blackbox:〜/ projects $ mvn archetype:create \
	    -DarchetypeArtifactId = maven-archetype-archetype \
	    -DartifactId = baremvc \
	    -DgroupId =例
	

コンソールで苦労しないようにするために、Eclipseに移行しましょう。もちろん、以下に書かれていることはすべて、vimまたはそのような何かで行うことができます。

	 grim @ blackbox:〜/ projects $ cd baremvc && mvn eclipe:eclipse
	

次に、インポートを実行して、構造をさらに詳しく調べます。



プロジェクトは、archetype-resourcesとMETA-INFの2つのサブフォルダーを含む1つのリソースフォルダーで構成されます。 最初のものには、私たちの死後にプログラマーの世代によって作成される将来の傑出したプロジェクトのバックボーンが含まれ、2番目にはファイルMETA-INF / maven / archetype.xmlが含まれます。 これはアーキタイプ記述子です。 アーキタイプに含まれるものの説明が含まれます。

バックボーンに必要なものをすべて追加します。単純なjspページ、多少なりとも許容できるweb.xml、単純なコントローラー、log4j.properties構成を追加します。 これはすべてアーカイブにあり、ダウンロードできます 。 注目すべき興味深い点のうち、プロジェクトを作成するときにMavenが行う置き換えに注意してください。 アーキタイプはVelocityベースのテンプレートエンジンを実装していますが、これは実際には文書化されていません。誰かが反対を確信している場合は共有してください、感謝します。

特に、テンプレートを介したコントローラーは、パッケージ名の置換を実装しました。

  // HomeController.java package $package; import org.apache.commons.logging.Log; @Controller public class HomeController { ... 

Spring MVC構成とターゲットpom.xmlの生成で同じ動きが使用されました。 これまでのところ、私に知られている変数のリストはかなり少ないです: $ groupId$ artifactId$ versionおよび$ package 。 誰もが誰もが意味することを理解していると思います。これはすべて、原型からプロジェクトを作成するときに示されます。

一般的に、テンプレートのテーマは興味深く、未解決です。少し後でもっと深く掘り下げると思いますが、今のところは、控えめなニーズには十分です。

テンプレートの準備プロセスが完了したら、同じarchetype.xmlであるアーキタイプ記述子ファイルを準備する必要があります。

  <archetype xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/plugins/maven-archetype-plugin/archetype/1.0.0 http://maven.apache.org/xsd/archetype-1.0.0.xsd"> <id>baremvc</id> <sources> <source>src/main/java/HomeController.java</source> </sources> <resources> <resource>src/main/resources/log4j.properties</resource> <resource>src/main/webapp/home.jsp</resource> <resource>src/main/webapp/WEB-INF/applicationContext.xml</resource> <resource>src/main/webapp/WEB-INF/web.xml</resource> </resources> <testSources /> </archetype> 

タグは、アーキタイプのartifactIdと一致する必要があります。 タグ<sources>および<resources>は、アーキタイプのさまざまな部分のテンプレートを対象としています。 特に、webappフォルダーのリソースは<resources>タグで指定する必要があります。 さらにいくつかの有効なセクションがあります。 以下は、それらで指定されたテンプレートが行く有効なセクションとフォルダーです。

<ソース>src / main / java
<リソース>src / main /リソース
<testSources>src / test / java
<testResources>src / test / resources
<siteResources>src /サイト


すべての準備が整ったら、次を使用してリポジトリにアーキタイプをインストールできます。

	 grim @ blackbox:〜/ projects / baremvc $ mvn clean install
	

これで使用する準備ができました。

	グリム@ブラックボックス:〜/ projects / baremvc $ cd ..
	 grim @ blackbox:〜/ projects $ mvn archetype:create \
	   -DarchetypeGroupId = org.example \
	   -DarchetypeArtifactId = baremvc \
	   -DarchetypeVersion = 1.0 \
	   -DgroupId = org.example \
	   -DartifactId = baremvcapp
	

私たちの小さなプロジェクトは立ち上げる準備ができています。

	 grim @ blackbox:〜/ projects / baremvcapp $ cd baremvcapp
	 grim @ blackbox:〜/ projects / baremvcapp $ mvn tomcat:実行
	


次に、リンクhttp:// localhost:8080 / baremvcappを使用して、この作成を確認できます。

これで、アーキタイプが準備されたと言うことができ、手でまたはアーキタイプ:クロールターゲットを使用してローカルディレクトリに追加します。

	 grim @ blackbox:〜/ projects $ mvn archetype:crawl -Dcatalog = / home / grim / .m2 / archetype-catalog.xml
	

これで、archetype:generateを呼び出すと、リストに行が表示されます

	 1:ローカル-> baremvc(baremvc)
	

私はそれを祝福します。

結論として、上記の方法は時代遅れ(alas)であり、廃止予定としてマークされていますが、それでも機能し、猫はドキュメントの正しい方法について叫びました。 今のところ私が知っているのは、記述子が変更されたことです。現在はarchetype-metadata.xmlと呼ばれ、より強力な構文を持っています。 もう10年前に書くのに十分な記事があればいいのですが。

ダウンロード可能なアーカイブ

表示できるソース

使用したリソース


  1. アーキタイプ作成ガイド-http ://maven.apache.org/plugins/maven-archetype-plugin-1.0-alpha-7/examples/archetype.html
  2. Mavenアーキタイププラグイン-http ://maven.apache.org/archetype/maven-archetype-plugin/
  3. Maven-2年間の使用後の考え-http ://habrahabr.ru/blogs/personal/102181/


UPD: アーキタイプの目標もあります:create-from- project。プロジェクトからテンプレートを生成します。 テンプレートは、target / generated-sources / archetypeフォルダーに生成されます。 つまり、実際には、どのプロジェクトからでもアーキタイプを生成し、それを出発点として使用できます。 ありがとう1nd1go

Source: https://habr.com/ru/post/J111408/


All Articles