maven-シェードプラグイン
重い依存パッケージのエンジニアリングおよび依存性などのスーパーパッケージMavenプロジェクトは、名前が付けられます。
次のように:パッキングとMainClassを配置し
<ビルド> <プラグイン> <プラグイン> <のgroupId> org.apache.maven.plugins </のgroupId> <たartifactId>達人-シェードプラグイン</たartifactId> <バージョン> 1.4 </バージョン> <実行> <実行> <相> パッケージ </相> <目標> <目標>日陰</目標> </目標> <設定> <フィルター> <フィルター> <アーティファクト> *:* < /アーティファクト> <除外> <除外> META-INF / config.temp </除外> </除外> </フィルタ> </フィルタ> <トランス> < トランス 実装 = "org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> < mainClass> COM。***。*** </ mainClass> </トランス> < トランス 実装 = "org.apache.maven.plugins.shade。 resource.AppendingTransformer "> < リソース> META-INF / spring.handlers </リソース> </トランス> < トランス 実装 = "org.apache.maven.plugins.shade.resource.AppendingTransformer"> <リソース> META-INF / spring.schemas </リソース> </トランス> </トランス> </構成> </実行> </実行> </プラグイン> </プラグイン>
Mavenの適用範囲
依存スコープ
POM 4に、<依存性>はまた、配備の管理に主に依存する、<スコープ>を導入しました。:現在、<スコープ>あなたは5つの値を使用することができます
*コンパイル、すべてのステージのデフォルト値は、プロジェクトと一緒にリリースされますが。
*提供、コンパイルと同様、期待JDK、容器、又はユーザこの依存関係を提供することができます。servlet.jarはよいます。
*このような位相を実行し、テストするためのJDBCドライバとしてのみ、実行時にランタイム、、。
*テストは、テストのみを使用する場合、コンパイルおよびテストコードを実行します。これは、プロジェクトに公開されることはありません。
提供に似て*システムは、瓶を備えた明示的な依存性を提供するために必要な、Mavenのリポジトリでそれを見つけることができません。
これはアプリケーションに依存するに含まれている依存して利用可能なクラスパスレンジ制御を依存しています。のは、各範囲の詳細を見てみましょう:
コンパイル (範囲コンパイル)
コンパイルデフォルトの範囲であり、範囲を提供していない場合は、その範囲は、コンパイルの範囲に依存しています。彼らはパッケージ化されながら範囲をコンパイルすると、クラスパスで使用可能なすべての依存します。
提供される (範囲が提供されています)
のみ依存JDKを提供または容器の後に使用する際、依存関係に提供されています。あなたは、Webアプリケーションを開発する場合たとえば、あなたはサーブレットをコンパイルし、クラスパスサーブレットAPIで利用できるコンパイルする必要があるかもしれませんが、あなたは、パッケージWARでのサーブレットAPIを含めたくない、あなたのサーブレットAPI JAR利用できるアプリケーションサーバーまたはサーブレットコンテナ。これは、依存性の範囲は、(実行しない)クラスパスのコンパイルに使用することができる提供しています。彼らはそれがパッケージ化されることはありません、推移ではありません。
ランタイム (走行レンジ)
ランタイム実行するときに依存し、テストシステムが必要とするが、コンパイル時に必要とされていません。たとえば、あなたはコンパイル時にのみJDBC APIのJARを必要とするかもしれないが、それは、JDBC実行する必要がある場合にのみ、
ドライバの実装を。
試験 (試験範囲)
一般的に、テスト範囲は必要ありません、コンパイルおよび実行時に依存して、彼らは唯一のテストのコンパイルとテスト動作フェーズで使用することができます。
システム (システム全体)
サンプルのpom.xml
<プロジェクトの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/maven-v4_0_0.xsd "> <modelVersion> 4.0。0 </ modelVersion> <groupIdを> ** </ groupIdを> <たartifactId> ** </たartifactId> <パッケージ> POM </梱包> <バージョン> 1.0 </ version>の <モジュール> <モジュール> ** </モジュール> <説明> ** </記述> <プロパティ> <project.build.sourceEncoding> UTF- 8 </project.build.sourceEncoding> <jdk.version> 1.8 </jdk.version > <slf4j.api.version> 1.7。14 </slf4j.api.version> <log4j.slf4j.impl.version> 2.5 </log4j.slf4j.impl.version> <log4j.core.version> 2.5 </log4j.core.version> <junit.version> 4.12 </junit.version> </プロパティ> <構築> <バージョン> 3.0。1 </バージョン> </プラグイン> </ホスト。nexus.release> </プラグイン> </ pluginManagement> </ビルド> <プロファイル> <概要> < ID >テスト</ ID > <プロパティ> <build.profile>試験</build.profile> <host.nexus.central> のhttp:// ホスト:ポート/ネクサス/コンテンツ/リポジトリ/中央 </host.nexus.central> <host.nexus.release> のhttp:// ホスト:ポート/ネクサス/コンテンツ/リポジトリ/リリース <host.nexus.public> http://ホスト:ポート/ネクサス/コンテンツ/リポジトリ/公共 </host.nexus.public> <host.nexus.snapshots> のhttp:// ホスト:ポート/ネクサス/コンテンツ/リポジトリ/スナップショット </host.nexus.snapshots> < /プロパティ> <構築> <フィルター> <フィルター>のsrc /プロファイル/ $ {} build.profile /config.properties </フィルタ> </フィルタ> <資源> <リソース> <ディレクトリ>SRC /メイン/リソース</ディレクトリ> <フィルタリング> 真 </フィルタリング> </リソース> </リソース> </ビルド> </概要> <概要> < ID > DEV </ ID > <起動> <activeByDefault> 真 </ activeByDefault> </活性化> <プロパティ> <build.profile> DEV </build.profile> < host.nexus.central> のhttp:// ホスト:ポート/ネクサス/コンテンツ/リポジトリ/中央 </host.nexus.central> <host.nexus.release> のhttp:// ホスト:ポート/ネクサス/コンテンツ/リポジトリ/リリース </host.nexus.release> <host.nexus.public> のhttp:// ホスト:ポート/ネクサス/コンテンツ/リポジトリ/公共 </host.nexus.public > <host.nexus.snapshots> のhttp:// ホスト:ポート/ネクサス/コンテンツ/リポジトリ/スナップショット </host.nexus.snapshots> </プロパティ> <構築> <フィルター> <フィルター>のsrc /プロファイル/ $ { build.profile} /config.properties </フィルタ> </フィルタ> <資源> <リソース> <ディレクトリ>のsrc /メイン/リソース</ディレクトリ> <濾過> 真 </フィルタリング> </リソース> </リソース> </ビルド> </概要> <概要> < ID > PROD </ ID > <プロパティ> <build.profile> PROD </build.profile> <host.nexus.central> のhttp:// ホスト:ポート/ネクサス/コンテンツ/リポジトリ/中央 </host.nexus.central> <host.nexus.release> のhttp://ホスト:ポート/ネクサス/コンテンツ/リポジトリ/リリース <リソース> </host.nexus.release> <host.nexus.public> のhttp:// ホスト:ポート/ネクサス/コンテンツ/リポジトリ/公共 </host.nexus.public> <host.nexus.snapshots> のhttp:// ホスト:ポート/ネクサス/コンテンツ/リポジトリ/スナップショット </host.nexus.snapshots> </プロパティ> <構築> <フィルター> <フィルター>のsrc /プロファイル/ $ {} build.profile /config.properties </フィルタ> < /フィルタ> <ディレクトリ>のsrc /メイン/リソース</ディレクトリ> <資源> <フィルタリング> 真 </フィルタリング> </リソース> </リソース> </構築> </プロフィール> </プロフィール> <リポジトリ> <リポジトリ> < ID >ネクサス中央</ ID > <名前>ネクサス中央</名前> <URL> $ {host.nexus.central} </ URL> <リリース> <有効> 真 </有効> </リリース> <スナップショット> <有効> 偽 </>有効 </スナップショット> </リポジトリ> <リポジトリ> < ID >ネクサスリリース</ ID > <名前>ネクサスリリース</名前> <URL> $ {host.nexus.release} </ URL> <リリース> <有効> 真 </ >使用可能 </リリース> <スナップショット> <有効> 真 </有効> </スナップショット> </リポジトリ> <リポジトリ> < ID >ネクサス・スナップショット</ ID > <リリース> <名前>ネクサスのスナップショット</名前> <URL> $ {host.nexus.snapshots} </ URL> <有効> 偽 </有効> </リリース> <スナップショット> <有効> 真 </有効> </スナップショット> </リポジトリ> </リポジトリ> <依存性> <依存性> <のgroupId> org.slf4j </のgroupId> <たartifactId> SLF4J-API </たartifactId> <バージョン> $ {slf4j.api.version} </バージョン> </依存> <依存性> <のgroupId > org.apache。logging.log4j </ groupIdを> <たartifactId>のlog4j-SLF4J-IMPL </たartifactId> <バージョン>$ {log4j.slf4j.impl.version} </バージョン> </依存> <依存性> <のgroupId> org.apache.logging.log4j </のgroupId> <たartifactId> log4jのコア</たartifactId> <バージョン> $ {log4j.core.version} </バージョン> </依存> <依存性> < groupId> JUnitの</のgroupId> <たartifactId> JUnitの</たartifactId> <バージョン> $ {junit.version} </バージョン> <スコープ>テスト</スコープ> </依存> </依存関係> </プロジェクト>
組み込みプロパティ(Mavenの事前定義された直接使用することができます)
{BASEDIR}プロジェクトルート$
$ {バージョン}はプロジェクトのバージョンを表し、
$ {BASEDIR}と$ {} project.basedir;
$ {}は同じ$ {バージョン}と、project.versionプログラムのバージョンを表し、
$ {project.build。ディレクトリ}標的とするディレクトリのデフォルトを構築
$ {}は符号化フォーマットをproject.build.sourceEncodingメインソースを表し、
$ {}は主ソースproject.build.sourceDirectoryパスを表し、
$ {}はproject.build.finalName出力ファイル名を示しています。
$ {} project.build.outputDirectoryビルドプロセスの出力ディレクトリ、デフォルトのターゲット/クラス
ます。https://www.cnblogs.com/niejunlei/p/5979630.htmlで再現