親愛なる皆さん、こんにちは。すぐにお詫びしたいと思います。週に 1 回記事を書くと約束したことを覚えています。うまくいきませんでした。まだ座ってきちんと書くことができていないのですが、あれこれしたくないのです。理由については泣き言は言いません。私には必要ありませんし、あなたももちろん興味がありません。プロジェクトは終わったわけではありません、停滞していました :) 続けます! そして、今日の内容は Maven に特化しています。
クローンされます。
メイビンについて話しましょう
まず、それをインストールする必要があります。もちろん、私は Mac を持っているので、Mac 用のインストール方法しか紹介できません。それはただ運が悪いだけです。ずっと前にインストールしたので、自分でインストールする必要があります:)Maven のインストール手順は、この資料に記載されています。 |
なぜ Maven が必要なのでしょうか?
Maven は、Gradle や Ant と並ぶプロジェクト構築ツールです。JRTB (JavaRush Telegram Bot) で使用するので、最新情報をお届けしたいと思います。今日では、組み立てシステムを使用せずに作成されたプロジェクトは一つもありません。組み立てシステムは私たちの生活を何度も簡素化してくれるからです。これにより、次のことが可能になります。- • 必要なライブラリをすべてプルアップします (アセンブリ用のツール - 依存関係 (つまり、依存関係) に関して)。
- • プロジェクトをどのように、何にまとめる必要があるかを正確に決定します (たとえば、プロジェクトを WAR で収集するのか、JAR で収集するのか、または実行可能 JAR で収集するのか)。
- • アセンブリ中にプロジェクトのバージョンが表示されるように、プロジェクトのバージョンを 1 か所に設定します。
- • プロジェクトとそのライフサイクルを説明する。
- • いわゆるプラグイン (英語の Plugin の伝統的なバージョン) を追加します。
- • 他のプロジェクトが依存関係としてライブラリを取得できるように、共有リポジトリでライブラリを公開します。
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 か、その他のいずれかで。
- •名前- プロジェクトにもっとわかりやすい名前を付けます。
- • ダウンロードできるプロジェクト リポジトリへのパス
<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-pluginとmaven-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コマンドの目的です。
GO TO FULL VERSION