まず、より正確な Maven アプリケーション シナリオを迅速に確立できるように、Maven の概念を簡単に整理します。
Maven は ant ではなく、make でもありません これまでに使用したビルド ツールでは、project1/src/*.java のコンパイルやその他の同様のステートメントなど、いくつかの詳細な手順を記述する必要があります。
Maven は「設定より規約」の方法を採用しており、一部の一般的な開発操作と手順が Maven で固定化されているため、ユーザーはそれらのステートメントを記述する必要がなくなりました。
Maven には、開発プロセスのサポートが組み込まれており、コンパイルだけでなくパッケージ化や公開も行うことができ、これらすべてのステップを一度に完了することもできます。
Maven は ivy ではありません。 依存関係管理は Maven の機能の 1 つであり、依存関係にスコープの概念が追加され、依存関係の分割がさらに洗練されます。
Maven は、自身をプロジェクト管理ツールとして位置づけています。プロジェクト開発プロセスのほぼすべてを管理する責任があります。
a. バージョン: maven には独自のバージョン定義とルールがあります
b. ビルド: maven は多くのアプリケーション タイプをサポートしており、サポートされるアプリケーション タイプのセットが定義されています。
c. 出力管理: maven は、プロジェクトによってビルドされたプロダクトを管理し、ユーザー ライブラリに追加できます。この機能は、プロジェクト チームと他の部門間の配信動作に使用できます。
d. 依存関係: Maven は、開発プロセス中の依存関係の混乱や相互汚染を回避するために、依存関係の特性を詳細に分析および分割します。
e. ドキュメントとビルド結果: maven のサイト コマンドは、ビルド プロセス、Javadoc、製品ドキュメントなどのさまざまなドキュメント情報のリリースをサポートします。
f. プロジェクト関係: 大規模なプロジェクトは、通常、Maven で簡単に管理できるいくつかの小さなプロジェクトまたはモジュールで構成されます。
h. 移植性管理:Maven は、さまざまな開発シナリオに応じてさまざまなタイプの出力結果を出力できます。 . Maven のライフサイクル
Maven は、プロジェクトの構築を検証、コンパイル、テスト、パッケージ化、デプロイメントなどのさまざまなライフサイクル (ライフサイクル) に分割します。
Maven のすべての実行アクション (ゴール) は、プロセス内での実行位置を示す必要があります。そして、Maven が実行されると、これらのゴールはプロセスの開発に応じてさまざまな処理のために順番に呼び出されます。これも Maven の基本的なスケジューリング機構です。一般に、後続のプロセスは前のプロセスに依存します。
もちろん、Maven はユーザーの要件に応じて特定の段階をスキップできる構成ファイルも提供します。
03. Maven の「設定に対する規約」
ただし、ユーザーは必要な場合を除き、同意した内容を変更する必要はありません。
Maven のデフォルトのファイルストレージ構造は次のとおりです:
/プロジェクトディレクトリ
pom.xml Maven の設定ファイル
/src ソースコードディレクトリ /src/main プロジェクトのソース コード ディレクトリ /src/main/java プロジェクトの Java ソース コード ディレクトリ /src/main/resource プロジェクト リソース ディレクトリ /src/test 単体テスト ディレクトリ /src/test/java /target 出力ディレクトリ、すべての出力はこのディレクトリに保存されます /target/classes 各ステージのコンパイル済みクラス ファイル 誰もが自分の仕事のやり方を知っています正しく。 たとえば、コンパイルタスクは、src/main/java からすべての Java ファイルをコンパイルし、その出力クラスファイルを target/classes に保存することを認識しています。 「構成よりも規約」戦略を採用すると、構成変更の作業負荷が軽減され、学習コストが削減されます。さらに重要なのは、プロジェクトに統一された仕様が導入されることです。 Maven は 4 つの要素を使用して、特定の出力を一意に見つけます: groupId:artifactId:packaging:version。 org.springframework:spring:2.5 など。 groupId グループ、会社、グループ、組織、プロジェクト、またはその他のグループ。グループ ID の規則では、プロジェクトを作成した組織の逆引きドメイン名で始まります。 groupId の下の ArtifactId は、個々のプロジェクトの一意の識別子を表します。たとえば、Tomcat、Commons などです。 artifactId にはピリオド (.) を含めないでください。 バージョン プロジェクトの特定のバージョン。リリース プロジェクトには、プロジェクトの特定のバージョンを指す固定バージョン識別子が付いています。 プロジェクトのパッケージ化形式も Maven 座標の重要な部分ですが、プロジェクトの一意の識別子の一部ではありません。 プロジェクトの groupId:artifactId:version により、そのプロジェクトは一意のプロジェクトになります。同じ groupId、artifactId、バージョン ID を持つプロジェクトを同時に持つことはできません。 パッケージ化 プロジェクトのタイプ。デフォルトは jar で、パッケージ化後のプロジェクトの出力を記述します。 Maven は、バージョン管理中にいくつかの特別な文字列 SNAPSHOT 、 LATEST 、 RELEASE を使用できます。 「1.0-SNAPSHOT」など。 各部分の意味と処理ロジックは次のように説明されます: スナップショット: は開発プロセスで使用され、インストールまたは公開時にシンボルを日付と時刻の値に展開し、UTC に変換します。このコンポーネントの時間。 たとえば、「1.0-SNAPSHOT」は、2010 年 5 月 5 日の午後 2 時 10 分にリリースされると、1.0-20100505-141000-1 になります。 最新: は、最終時点に応じて、特定のコンポーネントの最新リリースを指します。リリース バージョンまたはスナップショット バージョンの場合があります。 リリース: は、最後のリリースバージョンを指します。
個人的には、この機能により、開発者はコードの直接の依存関係のみに集中できるようになります。 たとえば、spring を使用する場合、spring 自体がどの外部のものに依存するかについては、maven が役に立ちます。 外部依存関係の説明には、groupId、artifactId、バージョン、スコープ、タイプ、オプションの要素が含まれます。最初の 3 つは必須で、それぞれの意味は次のとおりです: ここでのバージョンは、(2.0,) は >2.0 を意味し、[2.0,3.0) は 2.0<=ver< を意味します。 ;3.0 ; [1,3),[5,7] のように、複数の条件をカンマで区切ります。 Maven は、プログラムの外部依存関係はプログラムの段階やアプリケーション シナリオに応じて変化すると考えているため、Maven の依存関係はスコープによって制限されます。 スコープには次の値が含まれます: コンパイル (コンパイル スコープ) ---> コンパイル スコープの依存関係はすべてのクラスパスで使用でき、パッケージ化されます。 provided (提供されたスコープ) ---> 提供された依存関係は、JDK またはコンテナーが依存関係を提供した場合にのみ使用されます。 たとえば、Web アプリケーションを開発する場合、サーブレットをコンパイルするにはコンパイル クラスパスで使用可能なサーブレット API が必要ですが、このサーブレット API をパッケージ化された WAR に含めたくありません。 runtime(运行时范围 --> runtime 依赖在运行和测试系统的时候需要,但在编译的时候不需要。 比如你可能在编译的时候只需要 JDBC API JAR,而只有在运行的时候才需要 JDBC 驱动实现。 test(测试范围)--> test 范围依赖 在一般的 编译和运行时都不需要,它们只有在测试编译和测试运行阶段可用。 system(系统范围) --> system 范围依赖与 provided 类似,但是你必须显式的提供一个对于本地系统中 JAR 文件的路径。 注意该范围是不推荐使用的(你应该一直尽量去从公共或定制的Maven仓库中引用依赖)。 type 一般在pom引用依赖时候出现,其他时候不用, optional 是否可选依赖。 依赖也可以是可选的,比如我们代码中没有任何cache依赖,但是hibernate可能要配置cache,所以该cache的依赖就是可选的。 maven的多项目管理也是非常强大的。一般来说,maven要求同一个工程的所有子项目都放置到同一个目录下,每一个子目录代表一个项目,比如 总项目/ pom.xml 总项目的 pom 配置文件 子项目1/pom.xml 子项目1的 pom 文件 子项目2/ pom.xml 子项目2的 pom 文件 按照这种格式存放,就是继承方式,所有具体子项目的pom.xml都会继承总项目pom的内容,取值为子项目pom内容优先。 要设置继承方式,首先要在总项目的pom中加入如下配置 其次在每个子项目中加入 当然,继承不是唯一的配置文件共用方式,maven还支持引用方式。引用pom的方式更简单,在依赖中加入一个type为pom的依赖即可。 用户可以在maven中定义一些属性,然后在其他地方用${xxx}进行引用。比如: maven 提供了三个隐式的变量,用来访问系统环境变量、POM信息和 maven 的 settings: env 暴露操作系统的环境变量,比如 env.PATH project 暴露 POM 中的内容,用点号(.)的路径来引用POM元素的值,比如 ${project.artifactId}。另外,java的系统属性比如user.dir等,也暴露在这里。 settings 暴露 maven 的 settings 的信息,也可以用点号(.)来引用。 profile 是 maven 的一个重要特性,它可以让 maven 能够自动适应外部的环境变化。 比如同一个项目,在linux下编译linux的版本,在win下编译win的版本等。 一个项目可以设置多个 profile,也可以在同一时间设置多个 profile 被激活(active)的。 自动激活的 profile 的条件可以是各种各样的设定条件,组合放置在 activation 节点中,也可以通过命令行直接指定。 profile 包含的其他配置内容可以覆盖掉 pom 定义的相应值。 如果认为 profile 设置比较复杂,可以将所有的 profiles 内容移动到专门的 profiles.xml 文件中,不过记得和 pom.xml 放在一起。 maven的主执行程序为 mvn.bat,linux下为mvn.sh,这两个程序都很简单,它们的共同用途就是收集一些参数,然后用 java.exe来运行maven的Main函数。 maven 同样需要有配置文件,名字叫做 settings.xml,它放在两个地方,一个是 maven 安装目录的conf目录下,对所有使用该 maven 的用户都起作用。 我们称为主配置文件,另外一个放在 %USERPROFILE%/.m2/settings.xml 下,我们成为用户配置文件,只对当前用户有效,且可以覆盖主配置文件的参数内容。 还有就是项目级别的配置信息了,它存放在每一个 maven 管理的项目目录下,叫 pom.xml,主要用于配置项目相关的一些内容。 当然,如果有必要用户也可以在 pom 中写一些配置,覆盖住配置文件和用户配置文件的设置参数内容。 一般来说,settings文件配置的是比如repository库路径之类的全局信息,具体可以参考官方网站的文章。 在maven中一般都会用到安装库文件的功能,一则是我们常用的hibernate要使用jmx库,但是因为sun的license限制,所以无法将其直接包含在repository中。 所以我们使用mvn命令把jar安装到我们本地的repository中 如果我们想把它安装到公司的repository中,需要使用命令 对于我们的工程输出,如果需要放置到公司的repository中的话,可以通过配置 pom 来实现 04. Maven バージョン仕様
<groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.3.7.RELEASE</version>
05. Maven の依存関係管理
<dependency> <groupId>org.wltea</groupId> <artifactId>analyzer</artifactId> <version>2012_u6</version> <scope>system</scope> <systemPath>${project.basedir}/src/main/webapp/WEB-INF/lib/analyzer-2012_u6.jar</systemPath> </dependency>
06. maven 多项目管理
<modules> <module>simple-weather</module> <module>simple-webapp</module> </modules>
<parent> <groupId>org.sonatype.mavenbook.ch06</groupId> <artifactId>simple-parent</artifactId> <version>1.0</version> </parent>
<dependency> <groupId>org.sonatype.mavenbook</groupId> <artifactId>persistence-deps</artifactId> <version>1.0</version> <type>pom</type> </dependency>
07. maven 内置属性
value1
08. maven profile
09. maven 配置文件
10. maven 本地安装和中央库发布
mvn install:install-file -DgroupId=com.sun.jdmk -DartifactId=jmxtools -Dversion=1.2.1 -Dpackaging=jar -Dfile=/path/to/file
mvn deploy:deploy-file -DgroupId=com.sun.jdmk -DartifactId=jmxtools -Dversion=1.2.1 -Dpackaging=jar -Dfile=/path/to/file -Durl= -DrepositoryId=release-repo
<distributionManagement>
<repository>
<id>mycompany-repository</id>
<name>MyCompany Repository</name>
<url>scp://repository.mycompany.com/repository/maven2</url>
</repository> </distributionManagement>
11. maven 常用命令
1. 创建Maven的普通java项目:
mvn archetype:create -DgroupId=packageName -DartifactId=projectName
2. 创建Maven的Web项目:
mvn archetype:create -DgroupId=packageName -DartifactId=webappName -DarchetypeArtifactId=maven-archetype-webapp
3. 编译源代码: mvn compile
4. 编译测试代码:mvn test-compile
5. 运行测试:mvn test
6. 产生site:mvn site
7. 打包:mvn package 8. 在本地Repository中安装jar:mvn install
9. 清除产生的项目:mvn clean
10. 生成eclipse项目:mvn eclipse:eclipse
11. 生成idea项目:mvn idea:idea
12. 组合使用goal命令,如只打包不测试:mvn -Dtest package 13. 编译测试的内容:mvn test-compile
14. 只打jar包: mvn jar:jar
15. 只测试而不编译,也不测试编译:mvn test -skipping compile -skipping test-compile
( -skipping 的灵活运用,当然也可以用于其他组合命令)
16. 清除eclipse的一些系统设置:mvn eclipse:clean
以上がMavenの概要と使用法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。