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



All Articles