なぜMavenが必要なのかを誰かに尋ねてください。プログラマー人口の90%が、多くの点で正しいと言うでしょう。
たとえば、C ++の場合、ライブラリをプロジェクトに接続することが深刻なステップであり、この特定のライブラリをreadmeに接続するための指示を含める必要があるほどアセンブリを複雑にすることが保証されている場合、Javaの場合、これは簡単かつ自然に行われます-昨夜はMavenに感謝します。
この記事は、比較的最近javaを学習し始めた人を対象としています。以前の記事からは、mavenが何であるか、ライブラリは何であるかを既に意味しますが、あまりよくわかっていませんが、それらを接続する方法はまったくわかりません。
遠くから始めましょう。
プロジェクトに新しいクラスを追加する方法
コードで標準クラス以外のクラスを使用するには、このクラスを作成する必要があります。つまり、対応するファイルを作成し、このファイル内に対応するコードを記述します。
新しく作成されたクラスは、他のすべてのクラスと同じ場所になければなりません。そうしないと、コンパイラーはそれを認識しません。 それを使用するには、適切なインポートディレクティブを使用するクラスに追加するだけです。
私は出席者に、船長の自明性への感謝を表明するために1、2分を費やすように勧め、その後読み続けます。
他の誰かが書いたクラスをプロジェクトに追加する方法
一般的に言えば、答えは明らかです。このクラスをコードにコピーする必要があります。
さらに、これは少しわかりにくいですが、すべてが開始されたクラスによって使用されるすべてのクラスをプロジェクトにコピーする必要があります。
ところで、他のクラスで使用されるクラスは、このクラスの依存関係と呼ばれます。
このアプローチには明らかなマイナスがあります。 クラスごとに、依存関係を探してから、自分の手でそれらをコピーする必要があります。 このコードヒープ全体に何らかのバグがある場合は、修正が表示された後、プロセスを再度繰り返す必要があります。
コードにコピーせずに、他の誰かが作成したクラスをプロジェクトに追加する方法
多かれ少なかれ現代のプログラミング言語では、この問題はすでに解決されています。
クラスはプロジェクトのディレクトリだけでなく、プログラマが指定した他のディレクトリからも取得する必要があることをコンパイラに常に伝えることができます。 Javaでは、これはclasspathパラメーターを使用して行われます。
Javaを使用する場合、クラスパスが何であるかを理解することが厳密に必要ですが、特にMavenを使用してライブラリをプロジェクトに追加するために、これを知る必要はありません。 このトピックのコンテキストでは、クラスパスはエンティティと見なすことができ、コンパイラはアプリケーションが必要とするクラスを探すすべての場所をリストします。 これらのクラスのいずれかがこれらの場所のいずれにもない場合、プログラムは機能しません。
これで、外部クラスを使用するには、このクラスでコードをダウンロードし、このコードがダウンロードされるディレクトリをクラスパスに追加するだけで十分です。
前の方法と比較して、これは注目すべき進歩です。 これで、アプリケーションの動作に必要な唯一のクラスのすべての依存関係を手動で追跡する必要がなくなりました。 バグ修正などを追加するには、新しいバージョンのコードをダウンロードするだけです。
それで実際に、私たちは図書館とは何かという質問の答えに来ました。
ライブラリとは何ですか?
ライブラリは、ルートディレクトリをクラスパスに追加するコードと呼ばれます。 つまり、必要なクラスとその依存関係の全体、および必要なクラスの依存関係ではないがコードに含まれるクラス。
Javaの場合、クラスパスに追加するコードをコンパイルし、コンパイルしたコードを含むディレクトリをクラスパスに追加できます。
コンパイルされたコードをzip形式でアーカイブし、アーカイブのファイル拡張子をjarに変更して、このファイルをクラスパスファイルに追加することもできます。 Java開発のコンテキストでは、jarファイルはライブラリとも呼ばれます。
jarファイルは上記の問題のいずれも解決しませんが、それらを使用すると、プログラマー間でのライブラリーの転送が大幅に容易になります。
ただし、jarファイルもまったく役に立たないという重大な問題が1つあります。
ライブラリが使用するクラスは含まれない場合がありますが、前のケースと同様に、依存関係とも呼ばれる他のライブラリに含まれます。
別のライブラリを使用してライブラリをプロジェクトに追加する方法
ライブラリをすべての依存関係とともにプロジェクトに追加するには、これらの依存関係をダウンロードして、プロジェクトに1つずつ追加する必要があります。 各依存ライブラリを更新するときは、再度ダウンロードする必要があります。
依存関係を更新すると、プロジェクトでクラスを使用するライブラリが正しく動作しなくなることがあります-これが発生しないことを慎重に監視し、各更新に責任を持ってアプローチするか、ライブラリを更新する必要があります更新なしでは何もできない場合にのみ。
依存関係の更新が何も壊さないことを確認する方法
厳密に言えば-方法はありません。
もちろん、依存関係を更新し、単体テストを実行する必要があります。 合格しない場合は、間違いがあると断言できます。
そうでない場合、これは故障がないという弱い証拠ですが、何も証明しません。
しかし、単体テストが信頼できると仮定します。 この場合、ライブラリを追加するときに、添付の単体テストを実行し、更新ごとにこれを実行することにより、依存関係との互換性を手動で確認する必要があります。 私を信じて、それは私にとって難しいです。
この退屈で複雑な作業を避けるために、世界中のプログラマーの間で書面での合意があります。 ライブラリは通常バージョン管理されています。
ライブラリを作成するとき、プログラマはコードを記述し、正しく動作することを確認してから、このコードに番号などの識別子を割り当て、その後、他のプログラマがコードでこのライブラリを使用できるようにコードを使用できるようにします。
他のプログラマがライブラリでエラーを見つけた場合、ライブラリの作成者はそれを静かに修正するだけでなく、修正後にライブラリ識別子を変更し、同じ名前で異なる識別子を持つ2つのライブラリが世界中で利用できるようになりました。
この識別子は、ライブラリバージョンと呼ばれます。
プログラマは、エラーを修正するときだけでなく、一般的な変更を加えてライブラリバージョンを更新します。
ライブラリまたは単にプログラムを作成するときにこのサードパーティライブラリを使用するプログラマは、ドキュメントだけでなく、ライブラリが正しく動作することが保証されているバージョンもドキュメントに示します。
つまり、1人が使用する依存関係のバージョンをチェックし、残りは自分の労力を利用するだけです。
これにより状況は大幅に簡素化されますが、プロジェクトに接続する必要があるライブラリの完全なリストを取得するために、コードのすべての依存関係と依存関係の依存関係を調べる必要がなくなるわけではありません。
ライブラリを更新する場合、プロセスを繰り返す必要があります。 私を信じて、これは痛いです。
プロジェクトに必要なすべてのライブラリのリストを取得し、それらを自動的にプロジェクトに追加する方法
そして、Mavenが助けになります。 彼はプログラマー間の暗黙の合意を正式にし、母音にします。
各ライブラリに明確に定義されたバージョンの依存関係のリストがある場合、プロジェクトに必要なすべてのライブラリのリストをコンパイルすることは難しくありません。
これらのライブラリをプログラマのマシンにコピーしてクラスパスに追加することも、最高の数学ではありません。 ライブラリをダウンロードする場所と依存関係の説明、およびこれらの依存関係がどの形式で記述されているかを知るだけで十分です。
Mavenでのこれらの問題は正常に解決されました。
ライブラリをMavenプロジェクトに接続する方法
ここではすべてが一般的に控えめです。 Mavenを理解するためのライブラリは、プログラムをビルドするために必要なアーティファクトです。
思い出すように、各アーティファクトには、groupId、artifactId、およびバージョンがあります。 このアーティファクトがプロジェクトの依存関係であることをMavenに伝える必要があります。
依存関係のリストは、依存関係タグでラップする必要があります。 個々の依存関係は、依存関係タグでラップする必要があります。 groupId、artifactId、およびversionタグの依存関係タグ内で、対応するパラメーターの値を指定する必要があります。
ここでは、ライブラリを追加したpom.xmlの例を提供する必要があるでしょう。 以下に例を示します。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com</groupId> <artifactId>hello-world</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.4</version> </dependency> </dependencies> </project>
ここでは、標準タスクを実行する静的メソッドの束を使用して、ライブラリをプロジェクトに接続しました。 これらのタスクの1つは、配列を展開して、追加の要素を追加することです。
以下に例を示します。
package com; import static org.apache.commons.lang3.ArrayUtils.*; public class Application { public static void main(String[] argv) { String[] phrase = {"Hello"}; phrase = add(phrase, " "); phrase = add(phrase, "world"); for (String word : phrase) { System.out.print(word); } System.out.println(); } }
コードをコンパイルするには、書く必要があります
mvn compile
実行するには
mvn exec:java -Dexec.mainClass="com.Application"
このコードはHello worldを出力しますが、前の記事とは異なり、新しいプログレッシブメソッドを使用します。 ライブラリを使用します。
それだけです。
Mavenは、プロジェクトに接続されたアーティファクトの依存関係を自分で見つけ、依存関係の依存関係と依存関係の依存関係を含む、プロジェクトに必要なすべてのライブラリのリストをコンパイルし、ビルドしているマシンにそれらをダウンロードして、クラスパスに追加します。
私を信じて、これは素晴らしいです。
合計
- 別のクラスによって使用されるクラスは、このクラスの依存関係と呼ばれます。
- ライブラリは通常、特定の問題とその依存関係を解決するために設計されたクラスのコレクションと呼ばれます。
- ライブラリからのクラスの依存関係は他のライブラリにある場合があり、これらのライブラリはその依存関係と呼ばれます。
- Javaでは、ライブラリからコンパイルされたクラスをjar拡張子付きのzipアーカイブにパッケージ化できます。 jarファイルはライブラリとも呼ばれます。
- プロジェクトで使用されるライブラリは、プロジェクトの依存関係と呼ばれます。 依存関係を接続するために、mavenは依存関係タグを使用します。 依存関係タグは、依存関係タグ内にある必要があります。
- Mavenでは、ライブラリはアーティファクトです。つまり、groupId、artifactId、およびバージョンがあります。
- ライブラリをmavenを使用してプロジェクトに接続するには、そのgroupId、artifactId、およびバージョンを指定するだけです。