Mavenは何ですか?
Mavenの、言葉は意味知識の蓄積という、イディッシュ語から来ています。もともと建設プロジェクトのプロセスジャカルタタービンプロジェクトを簡素化するために使用。Javaプロジェクトを構築し、管理するための最後に、フォームベースのツール。
インストールと設定
インストールは比較的簡単です、ダウンロードする公式サイトでは、あなたは、環境を構成することができます。ここでお勧めします、インストール後にミラーリング倉庫を設定するには、アクセスを高速化することができます。
編集settings.xml
中</mirrors>
の前に追加
-
<mirror>
-
<id>nexus-aliyun</id>
-
<mirrorOf>central</mirrorOf>
-
<name>Nexus aliyun</name>
-
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
-
</mirror>
Mavenプロジェクトの作成
基本的なJavaプロジェクトを作成するには
-
mvn archetype:generate
-
-DgroupId=com.mycompany.app
-
-DartifactId=my-app
-
-DarchetypeArtifactId=maven-archetype-quickstart
-
-DinteractiveMode=false
アイテムを作成するために、他のツールを使用して、まったく同じです。
Mavenプロジェクトの構造
Mavenの基本的な概念
POM(プロジェクト・オブジェクト・モデル)
POMはプロジェクトオブジェクトモデルの略で、人気のポイントとビルドモデリングへのプロジェクトの言葉は、このプロジェクトは、オブジェクト(オブジェクト)として構築されます。
我々は、このオブジェクトに精通しているかを説明するためのJavaコードを使用することができます。
-
package cn.iisheng.maven;
-
-
import java.util.Set;
-
-
/**
-
* @author iisheng
-
* @date 2019/12/05 15:12:01
-
*/
-
public class ProjectObject {
-
/**
-
* 表示组织或者组织的项目唯一的标识符
-
*/
-
private String groupId;
-
/**
-
* 表示项目内部组件的标识
-
*/
-
private String artifactId;
-
/**
-
* 打包方式
-
*/
-
private String packaging;
-
/**
-
* 表示该artifact 版本号
-
*/
-
private String version;
-
/**
-
* 依赖的其他项目
-
*/
-
private Set<ProjectObject> dependencies;
-
/**
-
* 父级项目
-
*/
-
private ProjectObject parent;
-
/**
-
* 子模块项目
-
*/
-
private Set<ProjectObject> modules;
-
-
// 下面几个属性 仅仅用于生成文档
-
-
/**
-
* 项目展示名字
-
*/
-
private String name;
-
/**
-
* 项目网址
-
*/
-
private String url;
-
/**
-
* 项目描述
-
*/
-
private String description;
-
}
ライフサイクル(ライフサイクル)
Mavenのビルドプロセスでのライフサイクルになるとライフサイクルは、いくつかの段階に分けて、各ステージはフェーズと呼ばれています。すなわち、ライフサイクルを構築する3つがありますdefault
、clean
、site
。default
プロジェクトを展開するためclean
、クリーンアッププロジェクトのためとsite
、プロジェクトのドキュメントを作成するため。
default
ライフサイクル相を含みます:
-
検証:プロジェクトをチェックして、必要な情報が提供されています
-
コンパイル:プロジェクトのソースコードをコンパイル
-
テスト:テストモジュールの実行単位の源
-
パッケージ:などのjarファイルにパッケージとしてパッケージ化項目、
-
検証:統合テストの結果は、それが品質基準を満たしていることを確認するためにチェックされています
-
インストール:ローカル倉庫にパッケージをインストールします
-
展開:リモートリポジトリにパッケージを展開
Mavenの共通コマンド
一般的に、モジュールの下にディレクトリをターゲット、プロジェクトによって生成された一時ファイルをクリーンアップ
-
mvn clean
プロジェクトパッケージングツールは、瓶や戦争は、ターゲットディレクトリモジュールおよび他の文書に生成されます
-
mvn package
テストコマンドやテスト以下のsrc /テスト/ javaの実行
-
mvn test
モジュールのインストールコマンドは、ローカルリポジトリにパッケージ化されたJARまたはWARファイルをコピーし、-Dmaven.test.skipを使用してテストをスキップする=真
-
mvn install
パッケージ化されたファイルのMavenリポジトリを解放するために発行されました
-
mvn deploy
同時にMavenの複数のコマンド
-
mvn clean package -U -Dmaven.test.skip=true -P test
フェーズと目標
ライフサイクルは、唯一実行することで、プロジェクト、ビルドする方法を提供validate
し、その後compile
のフェーズの一連のが、各フェーズを定義行うには何も特定があります。ここで、位相効果はインタフェースでJavaに似て、目標位相の内部の具体的な実現です。
A相は、特定のビルドプロセスを実行するために、一つ以上の目標にバインドする必要があります。任意の設定なしでユーザーを許可するには、フェーズ目標を拘束コアのライフサイクルの一部にMavenプロジェクト、Mavenのデフォルトを使用することができます。
あなたがカスタムバインディングが必要な場合は、できるpom.xml
プロファイル。
Mavenのコアコンセプト
Mavenの座標
Mavenの座標は、プロジェクトの一意性を識別するために主にあります。次の属性で構成さ:
-
groupId:組織やプロジェクトの名前
-
たartifactId:プロジェクト固有のモジュール
-
バージョン:プロジェクトのバージョン
-
包装:包装プロジェクト
-
分類器:POMの異なる内容を区別するための手段は、同じから構築しました
Mavenのリポジトリ
ローカルストレージ管理手段(JAR、WARなど)。
一般的には、次の3つのカテゴリに分類:
-
現地倉庫:デフォルト
~/.m2/repository
のディレクトリ、他のディレクトリには、設定ファイルで設定することができます -
ネットワーク内のMavenのリポジトリ:PW
-
中央倉庫:コミュニティ倉庫Mavenは人気のライブラリの多数が含まれています
Mavenは依存しています
pom.xml
依存する設定項目、等
-
<dependency>
-
<groupId>junit</groupId>
-
<artifactId>junit</artifactId>
-
<version>4.12</version>
-
<scope>test</scope>
-
</dependency>
scope
依存とクラスパスのコンパイル、テスト、実行の間の関係を制御するために使用します。3次の関係があります。
-
コンパイル:デフォルトのコンパイラに依存範囲を。コンパイル、テストのために、三つのクラスパスの操作は有効です
-
テスト:テストは範囲を依存しています。唯一のテストクラスパスの有効な
-
提供:依存範囲を提供しました。コンパイル、操作のための効果的なテストクラスパスが無効です。
-
ランタイム:ランタイム提供
-
テスト:テストのために、と渡すことはできません
-
システム:類似したが、提供する必要がありますが表示はJARを提供
-
インポート:のみ
dependencyManagement
のサポートと。
推移的依存関係
Mavenのは経由で推移的依存関係の解決のJARパッケージが依存し、例えば、私は私のプロジェクト、JUnitのだけでなく、だけでなく、JUnitのJARの依存パッケージを解析し、プロジェクトのJUnitを導入しました。
どのようにするとき、パッケージの競合を生成?
仮定A->異なるバージョンB-> C-> D1、E-> F-> D2、D1、D2 D、それぞれ。
場合はpom.xml
、ファイルAとEの導入後、推移的依存関係のMaven、JARパッケージの原理に従って、実際にプロジェクト内に導入する必要がある、必要があります:ABC D1およびEF D2を、D1ので、D2は、パケットの衝突が生成されます。
パッケージの競合を解決する方法?
Mavenは解決されpom.xml
、同じJARパッケージは一つだけを維持しますとき。
パッケージの競合のために、Mavenは戦略を処理します:
-
最短パス優先:Mavenの顔D1 D2は、D2で最短経路を選択します。E-> F-> D2> B-> C-> A- D1が経路より短いからです。
-
最初の宣言が優先されます:同じパスした場合、我々はJARパッケージの最初の文を選択してください。
依存関係を削除する方法?
-
<dependency>
-
<groupId>junit</groupId>
-
<artifactId>junit</artifactId>
-
<version>4.12</version>
-
<exclusions>
-
<exclusion>
-
<groupId>org.hamcrest</groupId>
-
<artifactId>hamcrest-core</artifactId>
-
</exclusion>
-
</exclusions>
-
</dependency>
Mavenの重合
モジュラーは、各モジュールはシャープに見えます。しかし、主な利点は、プロジェクトのルートディレクトリにプロジェクトをビルドする際に構築しながら、モジュール内の以下の項目のすべてが続くことです。
-
<modules>
-
<module>study-common</module>
-
<module>study-dao</module>
-
<module>study-service</module>
-
<module>study-web</module>
-
</modules>
Mavenの継承
重複の継承を排除するために。同じ構成の多くを抽出することができます。
サブモジュールによってparent
タブの設定、プロパティは、親モジュールから継承されました。父モジュールは、dependencyManagement
ラベルを管理します。
マルチモジュールのバージョン番号は、プロジェクトのルートディレクトリの実装をコマンド操作をすることができますMavenの
新しいバージョン番号を設定します
-
mvn versions:set -DnewVersion=0.0.2-SNAPSHOT
新バージョンは、ロールバック動作に設定されています
-
mvn versions:revert
新バージョンは、演算提出するように設定されています
高品質のビデオプログラミングshangyepingtai.xin
-
mvn versions:commit
Mavenのマルチモジュールプログラムの構造、構成およびMavenのプロパティの継承のように、この項目を参照することができるhttps://github.com/iisheng/mybatis-study