Maven
記事ディレクトリ
1.Mavenを使用する理由
- プロジェクトが非常に大きい場合、パッケージを使用してモジュールを分割することは適切ではありません。Mavenはプロジェクトを複数のプロジェクトに分割できます。
- Mavenを使用すると、jarパッケージをウェアハウスに保存し、jarパッケージをコピーして貼り付けることなく、使用時にウェアハウスから直接取得できます。
- よく知られているすべてのjarパッケージはMaven倉庫に配置されているため、オンラインで検索する必要はありません。
- Mavenを使用して、jarパッケージが依存するjarパッケージを自動的にインポートします
2、Mavenの紹介
MavenはApacheのオープンソースプロジェクト管理ツールです。将来作成されるJavaSEプロジェクトでもJavaEEプロジェクトでも、Mavenプロジェクトとして作成されます。Mavenの各プロジェクトは、オブジェクト(プロジェクト)の1つであるオブジェクトと同等です。およびオブジェクト(プロジェクト)それらの間には関係があります。関係には次のものが含まれます:依存関係、継承、集約、およびMavenプロジェクトの使用により、jarパッケージのインポートとプロジェクトの分割の効果をより簡単に実現できます。
3、Mavenのダウンロードとインストール
- Mavenダウンロードアドレス:http://maven.apache.org/
- Mavenのインストール
(1)ダウンロードしたzipを解凍して取得します
(2)confディレクトリのsettings.xmlで変更します
①設定タブに追加
<localRepository>E:\maven_localRepository</localRepository>
ラベルの内容は、jarパッケージを格納しているローカルウェアハウスのディスク上の場所を示しています(フォルダーを作成して自分で指定できます)
指定しない場合、ローカルリポジトリのデフォルトパス:C:\ Users [現在ログインしているユーザー名] .m2 \ repository
②設定タグのミラータグに追加します
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
インターネット上のリモートウェアハウスからjarパッケージをダウンロードするときに、Aliのミラーリングが使用され、公式アドレスを使用するとダウンロード速度が非常に遅いことを示します
③設定タブのプロファイルタブに追加
<profile>
<!-- 告诉maven我们用jdk1.8 -->
<id>jdk-1.8</id>
<!-- 开启JDK的使用 -->
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<!-- 配置编译器信息 -->
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
動作環境に複数のJDKがある場合は、JDKを指定する必要があります。ここではJDK8として指定します。
- Maven環境変数の構成
構成後、コンソールにmvn -vと入力して、インストールが成功したかどうかを確認します(jdkバージョンとmavenバージョンは、インストールが成功したことを示しているように見えます)
3つ目は、Mavenウェアハウスの導入です。
1.リモートウェアハウス
(1)中央倉庫
アドレス:https://mvnrepository.com/
jarパッケージをオンラインでダウンロードすると、次の図に示すように、デフォルトで中央倉庫からダウンロードされます。
(2)中央倉庫のミラーリング
中央ウェアハウスのトラフィックを共有します。以前に構成されたAliイメージは中央ウェアハウスイメージです
(3)プライベートサーバーウェアハウス
企業の内部使用のためにイントラネット上に構築された内部Mavenウェアハウス
2.地元の倉庫
リモートウェアハウスからダウンロードされたjarパッケージはローカルウェアハウスに保存され、パスは以前に構成されています
3.倉庫の優先順位
第四に、Maven座標の導入
5、Mavenプロジェクトタイプ
- POMエンジニアリング
POMプロジェクトは、親プロジェクトまたは集約プロジェクトで使用される論理プロジェクトであり、jarパッケージのバージョン管理に使用されます。
- JARプロジェクト
jarにパッケージ化され、jarパッケージとして使用されます。つまり、一般的なローカルプロジェクト—> Javaプロジェクト
- WARプロジェクト
戦争にパッケージ化され、サーバープロジェクトで公開されます
6、IDEAでMavenを使用する
- IDEAでMavenを構成する
- IDEAでMavenプロジェクトを作成する
- Mavenプロジェクトのディレクトリ構造の概要
src
には、プロジェクトのすべてのソースコードとリソースファイル、およびプロジェクトに関連するその他のファイルが含まれています。
Javaソースコードはsrc / main / javaディレクトリに保存されています
src / main / resources
は、xml構成ファイルやプロパティファイルなどのメインリソースファイルを格納します
src / test / java
は、テストに使用されるクラスを格納します。たとえば、JUNITのテストは通常、このディレクトリの下に配置されます。
src / test / resources
は、テスト環境のリソースファイルを保存するフォルダーを手動で作成できます
pom.xml
は、Mavenの最も重要な構成ファイルであり、プロジェクトとプロジェクト間の関係を構成したり、jarパッケージをインポートしたりできます。
ターゲット
は、コンパイルされたコンテンツが配置されるフォルダーであるsrcと同じレベルにあります(現在はコンパイルされていないため、そのような構造はありません)
製造方法:
注:[インストール]をクリックすると、警告が表示される場合があります
解決策:
pom.xmlを追加します:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
セブン、Mavenプロジェクト間の関係
1.依存関係
プロジェクトの開発または運用にはBプロジェクトのサポートが必要です。つまり、AプロジェクトはBプロジェクトに依存しています。
依存関係はjarパッケージのインポートであると一般に理解されており、Bプロジェクトは、独自のプロジェクトのインストール後のjarパッケージ、またはウェアハウス内のjarパッケージにすることができます。
依存関係を挿入する方法:pom.xmlで構成します。
プロセス:最初にローカル倉庫で検索します。見つからない場合は、オンラインでリモート倉庫にアクセスして検索し、ローカル倉庫にダウンロードしてインポートします。結果は次のとおりです。
依存の利点:
(1)プログラマーは手動でjarパッケージを追加する必要はなく、pom.xmlで直接構成し、依存関係の構成を削除するだけで、プロジェクトは対応するjarパッケージを自動的に削除します。
(2)jarパッケージの競合の問題を解決できます。異なるバージョンの同じjarパッケージをインポートすると、2つのjarパッケージがプロジェクトに表示されず、そのうちの1つが自動的に保持されます。
①依存の特徴と原則
(1)特徴
Mavenプロジェクト1はjar1に依存し、Mavenプロジェクト2はMavenプロジェクト1に依存し、jar1もMavenプロジェクト2にインポートされ、プロジェクト1に依存するjar1を直接使用できます。
プロジェクト2に依存するプロジェクト1の方法は、jarパッケージに依存する方法と同じですが、プロジェクトのインストール後に座標を構成するだけです。
(2)原則
i。最短経路の第一原理
たとえば、A、B、およびC間の依存関係がA-> B-> C-> D(2.0)およびA-> E->(D1.0)であるとすると、D(1.0)が使用されます。 AからE、Dへのパスが短い
ii。最初に優先順位の原則を宣言する
依存関係パスの長さが等しいことを前提として、pom.xmlの依存関係宣言の順序によって、誰が解析および使用されるかが決まり、最も高い順序の依存関係が最初に使用されます。
②依存をなくす
AはBに依存し、BはCに依存し、Cはmybatis.jarに依存し、Cのmybatis.jarをAから除外します
<!-- 项目A的pom.xml中编辑 -->
<dependencies>
<!-- 依赖项目C -->
<dependency>
<groupId>com.qizegao</groupId>
<artifactId>MavenDemo</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- <exclusions>中可以使用多个<exclusion> -->
<exclusions>
<exclusion>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<!-- 不写版本号 -->
</exclusion>
</exclusions>
</dependency>
</dependencies>
③依存の範囲
依存関係の範囲によって、依存するjarパッケージが有効な場合と無効な場合が決まります。
依存スコープの使用法:
依赖范围分类:
コンパイル
これはデフォルトのスコープです。指定しない場合、依存関係スコープが使用されます。つまり、依存関係はコンパイルと実行時の両方で有効になります。
提供された
依存関係は、プロジェクトをコンパイルおよびテストするときに必要ですが、プロジェクトの実行時には有効になりません。
ランタイム
はコンパイル時に有効にする必要はありませんが、実行時にのみ有効になります
システム
依存関係スコープは、提供されているものと同様です。システムスコープ依存関係を使用する場合、依存ファイルのパスは、systemPathタグを介して明示的に指定する必要があります。
テストは
、テストコードをコンパイルしてテストを実行する場合にのみ必要です。プロジェクトの通常の操作では、このような依存関係は必要ありません。
import
importは、jarパッケージのバージョン番号を指定するために、pom.xml構成ファイルのタグで宣言する必要があります。
2.継承
親プロジェクトをPOMプロジェクトとして宣言すると、子プロジェクトは、親プロジェクトがデフォルトで依存するjarパッケージをインポートします
(dependencyManagementタグを使用してすべてのjarパッケージを管理し、jarパッケージのバージョンを制御します)
<groupId>com.qizegao</groupId>
<artifactId>ParentMaven</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 打包类型,默认是jar -->
<packaging>pom</packaging>
<!-- 管理所有jar包,使用dependencyManagement标签表示不会引入这些jar包,仅管理 -->
<!-- 使用properties标签和${}控制版本 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<!-- 使用properties标签中的版本号 -->
<version>${name}</version>
</dependency>
</dependencies>
</dependencyManagement>
<properties>
<!-- 此标签可任意起名 -->
<name>3.5.6</name>
</properties>
上記のプロジェクトから継承するサブプロジェクトを宣言します
<!-- parent标签指定父工程 -->
<parent>
<groupId>com.qizegao</groupId>
<artifactId>ParentMaven</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 以下标签声明父工程的pom.xml文件所在的位置 -->
<relativePath>../ParentMaven/pom.xml</relativePath>
</parent>
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<!-- 无需声明版本号,继承父工程的版本号,父工程可以控制子工程的版本号 -->
<!-- 子工程可以使用version标签指定版本号而不使用父工程的版本号 -->
</dependency>
</dependencies>
注:親プロジェクトがインポート依存範囲を使用する場合、サブプロジェクトは親プロジェクトで指定されたバージョン番号を使用する必要があります
3.集約
開発されたプロジェクトに複数のモジュールがある場合(各モジュールは独立したプロジェクトです)、集約プロジェクトを使用する必要があります
アグリゲーションプロジェクト(最上位の親プロジェクト)のプロジェクト全体はPOMプロジェクトである必要があり、残りのモジュールはPOMプロジェクトに含まれています。親プロジェクトのタグを使用して、含まれるサブモジュールを示します。
8.Mavenで一般的に使用されるプラグイン
1.リソースコピープラグイン
Mavenがパッケージ化されている場合、デフォルトでは、src / main / resources内の構成ファイルのみがプロジェクトにコピーされてパッケージ化されます。このディレクトリ内の構成ファイルは、パッケージ化時にプロジェクトに追加されません。このプラグインを使用して、指定されたファイルをパッケージ化します。
pom.xmlにパッケージ化されるリソースを構成します。
<build>
<resources>
<resource>
<!-- 要打包的资源位置 -->
<directory>src/main/java</directory>
<includes>
<!-- 要打包的资源 -->
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<!-- 要打包的资源位置 -->
<directory>src/main/resources</directory>
<includes>
<!-- 要打包的资源 -->
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</resource>
</resources>
</build>
2.Tomcatプラグイン
外部のTomcatサーバーに依存する必要はありません。Mavenはtomcatプラグインを提供します
(1)Webプロジェクトを作成する
作成後の構造(Java、リソースなどの欠落しているディレクトリは手動で作成できます):
注意:创建项目时如果出现警告:
No archetype found in remote catalog. Defaulting to internal catalo
解決:
(2)pom.xmlファイルでTomcatプラグインを構成します
<build>
<plugins>
<!-- 配置Tomcat插件 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<!-- 配置Tomcat监听端口 -->
<port>8080</port>
<!-- 配置项目的访问路径(Application Context) -->
<path>/</path>
</configuration>
</plugin>
</plugins>
操作結果:
アドレスバーに入力:http:// localhost:8080 / MyProject
がindex.jspページに正常にアクセスしました
(コードが乱雑にならないように、jspページのエンコード形式をUTF-8に変更してください)
これは、サーバーが正常に起動したことを示しています
ナイン、メイヴンの一般的なコマンド
Mavenコマンドは、上のアイコンの右側で直接クリックして実行できます
- インストール
コンパイル、パッケージ化、およびローカル倉庫へのインストールを含むローカルインストールを、
コンパイル-javacコマンド
Package-jarコマンド、javaコードを
jarファイルにパッケージ化しますローカルウェアハウスにインストールします-パッケージ化されたjarファイルをローカルウェアハウスに保存します
-
clean
は、コンパイルされた情報をクリアし、プロジェクト内のターゲットディレクトリを削除し、パッケージ化されたjarファイルを削除します。 -
コンパイル
のみコンパイル、javacコマンドと同等 -
パッケージ
、コンパイルとパッケージングの2つの機能を含む
インストールとパッケージの違い:
packageコマンドは、プロジェクトのコンパイル、単体テスト、およびパッケージ化機能を完了しましたが、実行可能jarパッケージ(warパッケージまたは他の形式のパッケージ)をローカルのMavenウェアハウスおよびリモートのMavenプライベートサーバーウェアハウスにデプロイしませんでした。
installコマンドは、プロジェクトのコンパイル、単体テスト、およびパッケージ化機能を完了します。同時に、実行可能なjarパッケージ(warパッケージまたは他の形式のパッケージ)はローカルのMavenウェアハウスにデプロイされますが、リモートのMavenプライベートサーバーウェアハウスにはデプロイされません。 。