JavaRush /Java Blog /Random-JA /Maven について知りたいことすべて - 「Java プロジェクトの A から Z まで」
Roman Beekeeper
レベル 35

Maven について知りたいことすべて - 「Java プロジェクトの A から Z まで」

Random-JA グループに公開済み
親愛なる皆さん、こんにちは。すぐにお詫びしたいと思います。週に 1 回記事を書くと約束したことを覚えています。うまくいきませんでした。まだ座ってきちんと書くことができていないのですが、あれこれしたくないのです。理由については泣き言は言いません。私には必要ありませんし、あなたももちろん興味がありません。プロジェクトは終わったわけではありません、停滞していました :) 続けます! そして、今日の内容は Maven に特化しています。 「Java プロジェクトの A から Z まで」: Maven について知りたいことすべて - 1

メイビンについて話しましょう

まず、それをインストールする必要があります。もちろん、私は Mac を持っているので、Mac 用のインストール方法しか紹介できません。それはただ運が悪いだけです。ずっと前にインストールしたので、自分でインストールする必要があります:)
Maven のインストール手順は、この資料に記載されています。

なぜ Maven が必要なのでしょうか?

Maven は、Gradle や Ant と並ぶプロジェクト構築ツールです。JRTB (JavaRush Telegram Bot) で使用するので、最新情報をお届けしたいと思います。今日では、組み立てシステムを使用せずに作成されたプロジェクトは一つもありません。組み立てシステムは私たちの生活を何度も簡素化してくれるからです。これにより、次のことが可能になります。
  • • 必要なライブラリをすべてプルアップします (アセンブリ用のツール - 依存関係 (つまり、依存関係) に関して)。
  • • プロジェクトをどのように、何にまとめる必要があるかを正確に決定します (たとえば、プロジェクトを WAR で収集するのか、JAR で収集するのか、または実行可能 JAR で収集するのか)。
  • • アセンブリ中にプロジェクトのバージョンが表示されるように、プロジェクトのバージョンを 1 か所に設定します。
  • • プロジェクトとそのライフサイクルを説明する。
  • • いわゆるプラグイン (英語の Plugin の伝統的なバージョン) を追加します。
  • • 他のプロジェクトが依存関係としてライブラリを取得できるように、共有リポジトリでライブラリを公開します。
一般に、彼はたくさんのことをやっており、それらはすべて役に立ちます。これだけは言っておきますが、初心者エンジニアにとって、最初から最後まですべての機能を知っている必要はありません。ここでも、git と同様に、基本と一般的な概念を理解することが重要です。これが私たちがやることです。私たちの場合、Maven はプロジェクトのルートにあるpom.xmlという XML ファイルから始まります。すべて実際に行うので、まず JavaRush コミュニティで最初のプロジェクトを作成します。すべてを賢明に行うために、リポジトリのテンプレートを使用します。ここには、JR で一度説明した基本的なものがすでに構成されています。作成するには、テンプレートのあるリポジトリに移動し、[このテンプレートを使用]ボタンをクリックします。「Java プロジェクトの A から Z まで」: Maven について知りたいことすべて - 2その結果、コミュニティに最初のリポジトリができました :) プロジェクトをローカルにダウンロードします。これを行うには、アイデアを通じて、[ファイル] -> [新規] -> [バージョン管理からプロジェクト]に移動します。表示されるウィンドウに、Github 上のプロジェクトへのリンクを入力します (全員が同じプロジェクトを個別に作成し、私と一緒にすべての手順を実行すると、結果がより良くなります) 。 [Clone]「Java プロジェクトの A から Z まで」: Maven について知りたいことすべて - 3をクリックすると、プロジェクトがクローンされます。

pom.xml はすべての先頭です

必要なものはすべて pom.xml にあります。プロジェクト、その開発者、およびプロジェクトが保存されているリモート リポジトリに関するすべての情報。まず、次のブロックに注目します。 <project/> - これはメイン ブロックであり、プロジェクトに関するすべての情報が含まれています。他のすべては明示的または推移的にその中に含まれます。開始タグ内には次のような記述があります。
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://maven.apache.org/POM/4.0.0"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
                     http://maven.apache.org/xsd/maven-4.0.0.xsd">
そして何よりも、次の行もすべての pomnik で書かれています (スラングはおそらく pom.xml からのものです:))。
<modelVersion>4.0.0</modelVersion>
しかし、その後はさらに興味深いものになります。記念碑で説明されているプロジェクトをどのように特定するかを説明します。私のライブラリを例として使用して説明し、それをメモリに追加し、新しく作成したプロジェクトに追加します。
<groupId>com.github.romankh3</groupId>
<artifactId>image-comparison</artifactId>
<version>4.4.0-SNAPSHOT</version>
<packaging>jar</packaging>

<name>Image Comparison</name>
ここでの主なことは次のとおりです。
  • groupId は、開発組織または個々のエンジニアの識別子です。通常、これは逆の順序のドメインです。ここでは例として、 Github 上のromankh3アカウントについて説明します。それは非常に重要です。Spring エコシステムの場合、それはcom.springframeworkであるとします。こうすることで、元のプロジェクトと他の人のフォークを区別したり、単にプロジェクト名の一致によって区別したりできます。
  • artifaceId は、このメモリに記述されている特定のプロジェクトの名前です。
  • version - このプロジェクトのバージョン。ここにあることはすべて明らかです。新しい機能が追加され、古い機能が修正され、リファクタリングまたはその他の変更が加えられ、バージョンが増加しました。
  • パッケージ化- ここでは、Maven がプロジェクトをどのように組み立てるべきかを説明します。Jar か、War か、その他のいずれかで。
  • 名前- プロジェクトにもっとわかりやすい名前を付けます。
入力する必要のない項目がまだいくつかあります。Maven はそれらを入力しなくても機能します。しかし、ライブラリを公開して一般に使用する必要がある場合は、それらを追加する価値があります。これは何だ?
  • • ダウンロードできるプロジェクト リポジトリへのパス

    <url>https://romankh3.github.io/image-comparison/</url>

  • • このプロジェクトが配布されるライセンス。さらに、複数ある場合があるため、次のように設定する必要があります。

    <licenses>
     <license>
       <name>The Apache Software License, Version 2.0</name>
       <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
     </license>
    </licenses>

  • • プロジェクトを作成した/作成中の開発者に関する情報:

    <developers>
     <developer>
       <id>romankh3</id>
       <name>Roman Beskrovnyi</name>
       <email>roman.beskrovnyy@gmail.com</email>
     </developer>
    </developers>

  • • scm ブロック。プロジェクトへのアクセス方法を記述します。

    <scm>
    <connection>git@github.com:romankh3/image-comparison.git</connection>
    <developerConnection>git@github.com:romankh3/image-comparison.git</developerConnection>
     <url>https://github.com/romankh3/image-comparison</url>
    </scm>

一般的な情報を説明した後、依存関係のあるブロックを追加できます。
<dependencies>
   <dependency>
       <groupId>org.mockito</groupId>
       <artifactId>mockito-core</artifactId>
       <version>2.26.0</version>
       <scope>test</scope>
   </dependency>
   <dependency>
       <groupId>org.junit.jupiter</groupId>
       <artifactId>junit-jupiter-api</artifactId>
       <version>5.5.2</version>
       <scope>test</scope>
   </dependency>
<dependency>
   	<groupId>com.github.romankh3</groupId>
   	<artifactId>image-comparison</artifactId>
   	<version>4.3.0</version>
<scope>test</scope>
</dependency>
</dependencies>
ここではテスト用に 2 つのライブラリを追加しました。これらは常に必要です。すでにお気づきかもしれませんが、依存関係にはスコープがあります。私たちのケースでは、 testが指定されています。これは、単純にメイン コードにこの依存関係が表示されないことを意味します。次に、すべてを美しく見せるために、別のタグを使用して<properties/>バージョンを表示します。
<properties>
   <mockito.version>2.26.0</mockito.version>
   <junit.version>5.5.2</junit.version>
   <image.comparison.version>4.3.0</image.comparison.version>
</properties>
したがって、依存関係ブロックは${PROPERTY_NAME}コンストラクト を使用して更新できます。
<dependencies>
   <dependency>
       <groupId>org.mockito</groupId>
       <artifactId>mockito-core</artifactId>
       <version>${mockito.version}</version>
       <scope>test</scope>
   </dependency>
   <dependency>
       <groupId>org.junit.jupiter</groupId>
       <artifactId>junit-jupiter-api</artifactId>
       <version>${junit.version}</version>
       <scope>test</scope>
   </dependency>
   <dependency>
       <groupId>com.github.romankh3</groupId>
       <artifactId>image-comparison</artifactId>
       <version>${image.comparison.version}</version>
       <scope>test</scope>
   </dependency>
</dependencies>
次に、大きな<build/>ブロックが続きます。このブロックには、ビルド プロセスをカスタマイズできる重要な<plugins/>ブロックが含まれています。次のように、 <plugins/>ブロック内に1 つ以上のプラグインを追加できます。
<build>
   <plugins>
       <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-source-plugin</artifactId>
           <version>3.2.0</version>
           <executions>
               <execution>
                   <id>attach-sources</id>
                   <goals>
                       <goal>jar</goal>
                   </goals>
               </execution>
           </executions>
       </plugin>
   </plugins>
</build>
ここでは、 maven-source-pluginmaven-javadoc-plugin という 2 つのプラグインを追加したことがわかります。各プラグインには設定可能な設定、属性 (パラメータ) があり、それによってプラグインをカスタマイズできます。これは将来私たちにとって興味深いことになるでしょう。とりあえず、思い出して先に進みましょう。依存関係の場合と同様に、プラグインのバージョンを<properties/>に記述します。これに基づいて、次のメモリを作成できます。
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://maven.apache.org/POM/4.0.0"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
                     http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>

   <groupId>com.github.javarushcommunity</groupId>
   <artifactId>maven-demo</artifactId>
   <version>1.0-SNAPSHOT</version>
   <packaging>jar</packaging>

   <name>Maven Demo Project</name>

   <url>https://github.com/javarushcommunity/maven-demo/</url>

   <properties>
       <mockito.version>2.26.0</mockito.version>
       <junit.version>5.5.2</junit.version>
       <maven.compiler.source>1.8</maven.compiler.source>
       <maven.compiler.target>1.8</maven.compiler.target>
       <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
       <source.plugin.version>3.2.0</source.plugin.version>
   </properties>

   <dependencies>
       <dependency>
           <groupId>org.mockito</groupId>
           <artifactId>mockito-core</artifactId>
           <version>${mockito.version}</version>
           <scope>test</scope>
       </dependency>
       <dependency>
           <groupId>org.junit.jupiter</groupId>
           <artifactId>junit-jupiter-api</artifactId>
           <version>${junit.version}</version>
           <scope>test</scope>
       </dependency>
   </dependencies>

   <build>
       <plugins>
           <plugin>
               <groupId>org.apache.maven.plugins</groupId>
               <artifactId>maven-source-plugin</artifactId>
               <version>${source.plugin.version}</version>
               <executions>
                   <execution>
                       <id>attach-sources</id>
                       <goals>
                           <goal>jar</goal>
                       </goals>
                   </execution>
               </executions>
           </plugin>
           <plugin>
               <groupId>org.apache.maven.plugins</groupId>
               <artifactId>maven-javadoc-plugin</artifactId>
               <version>${javadoc.plugin.version}</version>
               <executions>
                   <execution>
                       <id>attach-javadocs</id>
                       <goals>
                           <goal>jar</goal>
                       </goals>
                   </execution>
               </executions>
           </plugin>
       </plugins>
   </build>
</project>

Maven のライフサイクル

Maven には Maven ライフサイクルのようなものがあります。これは Maven が実行できる一連のタスクであると言う価値があります。Maven ライフサイクル以外にも他のタスクがある場合があります。どんな内容ですか?プロジェクトを組み立てることができる一連のコマンドがあります (ビルド...また、もちろん英語のトレーシングペーパーですが、これがなければどこにもありません)。Maven が収集したビルドを削除し、Maven ローカルにインストールします。プロジェクトを依存関係としてローカルにプルアップするなどです。それでは、すべてについて詳しく話しましょう。これらのチームについての私の意見を書く前に、この問題についてインターネット上で彼らが書いていることを読んでみようと思いました…そして、それを説明するのは非常に難しいことに気づきました。作業、初期作業には、いくつかのコマンドが必要です。それらを説明しましょう:
  • コンパイル— プロジェクトをコンパイルします。これは最初の段階です。この段階では、プロジェクトにコンパイル エラーがあるかどうかを確認できます。IDEA での作業にはさまざまな飛躍が発生することがあります。それが、コンパイルの問題が存在すべきでない場所に発生する理由です。したがって、このコマンドはすべての i にドットを付けます。
  • test - JUnit 上で実行され、Maven が予期する場所にあるすべてのテストを実行します ( src/test/javaがキャプテンです)。
  • packageは次のコマンドで、前の 2 つのコマンドが含まれます。つまり、最初にその内部でコンパイルコマンドが起動され、次にテストコマンドがコンパイルされたプロジェクトに送信され、ここですべてが OK であれば、アーカイブの作成が開始されます。 (<packaging/> で選択したアーカイブ))
  • install - Maven をマシンにインストールすると、プロジェクト用にダウンロードしたライブラリを保存するローカル Git リポジトリが作成されます。しかし、Maven の利点は、installコマンドを使用してプロジェクトをローカル Git リポジトリに追加し、プロジェクトを依存関係としてローカルで使用できることです。信じられない?試してみてください :) こうすることで、自分のプロジェクトが他のプロジェクトへの依存関係としてどのように見えるかをすぐに確認できます。
  • デプロイは、これまでのすべての頂点です。インストールとしてローカル リポジトリにプロジェクトを追加するだけでなく、リモート リポジトリにもプロジェクトを追加できるようにするコマンド。アクセス権を持つ誰もがそのプロジェクトを依存関係として使用できます。
  • verify - すべてをチェックし、プロジェクトがデプロイメントの準備ができているかどうかを判断するコマンド。
  • clean - もちろん、コンパイルされたファイルとアーカイブはどこかに保存する必要があります。Maven にはこのためのターゲットフォルダーがあります。これはプロジェクトに必要のないデータです。プロジェクトを再組み立てする前に、以前のものをすべて削除するとよいでしょう。これがcleanコマンドの目的です。

Maven プラグイン

プラグインについてもっと話したかったのですが、記事が長くなってしまいました。これはあなたの宿題になります。それが何なのか、どのように使用するのかを理解してください。 記事の続きでは、実際に Maven を扱います。

シリーズのすべてのマテリアルのリストは、この記事の冒頭にあります。

コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION