あなたが実際に無用のMavenプロジェクトをビルドしますか?

私はアウトソーシングパートナードラゴンと少しの時間でプロジェクトを行うときに年前、彼は重大な侮辱を受けました。その時、私はMavenを知らなかった、それはまだしてプロジェクトをビルドするための最も原始的な方法である、ドラゴン最後のインポート時にプロジェクトがオープンソースのライブラリプロジェクトの依存関係をダウンロードするのに長い時間がかかりました。

私の尊重のうち、ドラゴンは呪いませんでしたが、非常に婉曲文:「ブラザーは、どのような結果、あなたが特定の評判を持っている、とさえ役に立たないのMavenプロジェクトをビルド、本当にああ私の目を開きました。」

裕福な自発的なプログラマとして、あなたはああを容認することはできません。この機会に、厳粛にMavenをご紹介することが必要です。

01、Mavenは何ですか?

かかわらず、優れた英語力の、それは言語の概要を与えるものネットワークを教えてください見て:

Apache Mavenは、ソフトウェアプロジェクトの管理や理解のためのツールです。プロジェクトオブジェクトモデル(POM)の概念に基づいて、Mavenは情報の中央片からプロジェクトのビルド、レポートおよびドキュメントを管理することができます。

そのおおよその手段は、ApacheのMavenのは、プロジェクト管理で、自動化ツールを構築し、プロジェクトオブジェクトモデル(POM)の概念に基づいて、あなたは、プロジェクト管理、レポーティング、およびドキュメントを構築することができます。非常に成功したオープンソースプロジェクトとしてApacheの組織Mavenのは、主にJavaベースのプロジェクトのビルドを提供し、依存関係の管理、およびプロジェクト情報管理

次の表に、これらの原則の原則を使用してMavenの条約の優先順位の設定:

ディレクトリ 目的
${basedir} pom.xmlストアとすべてのサブディレクトリ
${basedir}/src/main/java Javaソース・コードが格納されています
${basedir}/src/main/resources リソースアイテムを格納するファイルは、そのようなlog4j.properties
${basedir}/src/test/java Testクラスを保存します
${basedir}/src/test/resources テストに使用するストレージ・リソース
${basedir}/src/main/webapp Webフロントエンドのファイルストレージ
${basedir}/target プロジェクトパッケージの出力ディレクトリの後
${basedir}/target/classes プロジェクトは、出力ディレクトリにコンパイルされると
~/.m2/repository デフォルトのMavenリポジトリディレクトリ(〜ユーザーディレクトリを示します)

使用規則オーバー構成では、プロジェクトの非常に統一されたディレクトリ構造図、Mavenプロジェクトの開発に異なる開発者が、ファイルの場所はほとんど差はありませんされ、最大の利益をもたらし、不要なトラブルを大幅に節約、および促進します標準化プロジェクトチーム。

私たちの時代は、オープンソースの精神を提唱されたほぼすべてのJavaプロジェクトのいくつかのサードパーティ製のオープンソースのライブラリを借りますが、これらのライブラリは、依存的でプロジェクトに導入することができます。しかし、バージョンの競合の増加に依存して、肥大化した依存の問題が続くでしょう。手これらの問題を解決する幸いMavenの三次元座標(を通じてのための優れたソリューションを提供し、非常に退屈であり<groupId>、、 <artifactId><version>正確各オープンソースのライブラリを検索します。

また、私はMavenの特に良いことは、それはすべてのプロジェクトのオープンソースのライブラリに依存しますがそれは言っている、指定されたローカル倉庫に遠隔中央倉庫からダウンロードされると思いますが、これらのオープンソースのライブラリは、複数のプロジェクト間で共有することができ、再ダウンロードせず - 私は軽蔑されない - 私はプロジェクトをビルドするMavenを使用した場合、その後、非常に多くのドラゴンは、彼の地元の倉庫が持つかもしれないオープンソースのライブラリをダウンロードする必要はありませんです。

02、Mavenの環境を設定します

あなたはMavenをインストールする前に1)、JDKがすでにコンピュータにインストールされていることを確認してください。

2)目的のバージョンをダウンロードして抽出するために、公式サイトをMavenのために、ダウンロードアドレスは以下のとおりです。

https://maven.apache.org/download.cgi

3)主にMAVEN_HOMEとパス、環境変数を設定します。

4)、コマンドラインを開き、入力mvn -v検証のMaven成功したコンフィギュレーションを。

5)Mavenのconfディレクトリの下に非常に重要なドキュメントのsettings.xmlが含まれ、通常の状況下では、私はにファイルをコピーする傾向がある~/.m2/ディレクトリ-私はあなたが同じことを示唆しています。

ファイルを開き、<mirrors></mirrors>次ミラーaliyunノード(以下のコードを参照)のアドレスを追加します。なぜ我々はそれを行う必要がありますか?アクセスが困難に強いケースを回すことなく、デフォルトのMavenリポジトリので。

<mirror>
      <id>alimaven</id>
      <name>aliyun maven</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
      <mirrorOf>central</mirrorOf>        
</mirror>

ことに留意すべき<mirrorOf>値は、次の4つの方法があります。

  • *:いずれかの要求が中央倉庫鏡に行くことを、すべてのリモートリポジトリを一致させてください。
  • external:*:すべてのリモートリポジトリ上のマッチは、ネイティブではありません。
  • repo1,repo2:マッチ倉庫repo1とrepo2、複数のリモートリポジトリを分離するためにコンマを使用。
  • *,!repo:感嘆符を使用し、レポを除く、すべてのリモートリポジトリと一致して倉庫に試合から除外されます。

6)メニューウィンドウ→ビューの表示→その他→Mavenの選択のビルド→Mavenのワークスペースを設定(かどうかをミラーを見るために、Eclipseで私は、Eclipseを使用するために使用さだが、そう私を許していないしてください、しかし、関係なく、統合開発環境のどのような種類の、アイデアや手順の両方を使用)大きな悪い悪くありません。

03、すぐにMavenプロジェクトを作成します

できるだけ早く、このセクションでは、私は意図的に回避意志焦点にステップするには、何のために必要な手順はスキップされません。

Eclipseの1)新しいプロジェクトは、Mavenのプロジェクトを選ぶとき。

2)次の選択項目のタイプ、選択達人 - アーキタイプ・クイックスタートでは、以下に示すように。

3)プロジェクトのパラメータを指定したときに充填グループIDとアーティファクトID。

4)プロジェクト後のディレクトリ構造図は下図のように作成されます。

Mavenの3はまだデフォルトのJDK 1.5を使用しているが、我々は戻って話をする、JDKのそれ以降のバージョンを設定することができます。

04、のpom.xmlの詳細な分析

そこ魂がファイルをのpom.xmlのみMavenプロジェクトであることは間違いなので、私はそれらを詳細に分析します。

1)基本的なプロジェクト情報

メイン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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.cmower</groupId>
  <artifactId>test</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>test</name>

</project>

①は、<project>ルート要素のpom.xml、名前空間を関連ステートメントです。

②、<modelVersion>Mavenの3.xの現在のプロジェクトオブジェクトモデル(POM)のバージョンを指定し、この値は、4.0.0とすることができます。

③、<groupId>プロジェクトのグループ名、しばしば組織的グループと場所、プロジェクトの会社または関連付けを定義します。

④、<artifactId> 定义了当前 Maven 项目在组中唯一的 ID。

⑤、<version> 定义了项目的版本号,SNAPSHOT 为快照的意思,也就是说该项目还处于开发阶段。

⑥、<packaging> 定义了项目的打包类型,可选值有 war、jar 等。

⑦、<name> 定义了项目的名称。

2)变量配置信息

pom.xml 文件的第二部分通常用来配置一些变量信息。

<properties>
    <spring.version>5.1.5.RELEASE</spring.version>
</properties>

有了变量的配置信息后,可以通过 ${spring.version} 的形式来调用这些配置项。这样做的好处显而易见,当依赖项的版本升级的时候,可以直接修改变量值即可。

3)依赖管理

阿里云的 Maven 仓库下有各种各样的第三方类库,换句话说就是,只有你想不到的,没有你找不到的。大多数 Maven 项目的依赖项列表都会很长很长,为了便于说明,下面我只列出某些具有特色的。

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>3.8.1</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>${spring.version}</version>
        <exclusions>
            <exclusion>
                <groupId>commons-logging</groupId>
                <artifactId>commons-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
        <version>1.1.1</version>
    </dependency>
</dependencies>

①、上文中曾提到,<groupId><artifactId><version> 合起来可以准确地定位一个依赖项。那怎么找到想要的依赖项呢?

第一步,进入 MavenRepository 网站,地址如下:

http://mvnrepository.com

然后在搜索框中输入第三方类库的关键字,比如说「spring-core」,点击「search」按钮,可以查看到该类库的链接导航。

第二步,点击链接进入到「spring-core」的主页,可以看到所有版本的「spring-core」,选择一个使用率最高的。使用率高在一定程度上表明这个版本的类库最稳定,它已经得到了广大程序员的认可。

第三步,进入该版本的主页,只需要左键轻轻地在 「Maven」选项卡内点一下,就已经把该类库的 Maven 依赖信息复制到粘贴板了(不需要「Ctrl+C」,非常的人性化),如下图所示。

第四步,将类库的依赖信息粘贴到 pom.xml 文件的 <dependencies> 节点下,然后按下快捷键「Ctrl+S」保存。紧接着,依次展开 test → Java Resources → Libraries → Maven Dependencies 节点,你可以看到该类库已经悄悄地添加进来了。

②、 <exclusions> 主要用于排除依赖。

有时候,我们引入的依赖中可能会包含一些不想要的依赖包,我们想引入自己想要的,这时候就要用到排除依赖了。

使用 <exclusion> 的时候只需要指定 groupId 和 artifactId 就行了,并不需要 version,这是因为 groupId 和 artifactId 就可以定位某种类型的依赖。

③、 <scope> 用来控制依赖的范围。

test:测试依赖范围。典型的例子是 Jnuit,它只有在编译测试代码及运行测试的时候才需要。

compile:编译依赖范围(其实不止是编译,对测试、运行同样有效),缺省项,如果没有指定,就会默认使用该依赖范围。

provided:提供依赖范围。对编译和测试有效,但在运行时候无效。

runtime:运行时依赖范围。对测试和运行有效,但在编译时无效。

PS:如果不知道选哪一种,缺省就对了。

4)构建配置

<build> 元素中包含了执行 Maven 构建周期目标所需的插件以及相关的配置。

<build>
       <finalName>test</finalName>
       <plugins>

           <plugin>
               <groupId>org.apache.maven.plugins</groupId>
               <artifactId>maven-compiler-plugin</artifactId>
               <version>2.3.2</version>
               <configuration>
                   <source>${jdk.version}</source>
                   <target>${jdk.version}</target>
               </configuration>
           </plugin>

       </plugins>

       <resources>
           <resource>
               <directory>src/main/java</directory>
               <includes>
                   <include>**/*.xml</include>
               </includes>
           </resource>
       </resources>
</build>

①、<finalName>,打成 jar 包或者 war 包时的名称。上文中曾提到,项目打包后的输出目录为 ${basedir}/target

②、<plugins> 用于指定项目在构建过程中使用的插件。

  • 用于确定使用的插件。
  • ,该插件所需要的特殊配置。Maven 3 默认使用的是 JDK 1.5,本例中我们使用了 JDK 1.8。

③、<resources> 描述了各个资源在 Maven 项目中的具体路径。

  • ,资源文件的路径,默认位于 ${basedir}/src/main/resources/ 目录下。
  • ,用于指定在构建过程中被处理的资源文件;对应 用于省去不被处理的资源文件。

05、使用 Maven 对项目进行清理、编译、测试、打包

1)清理:mvn clean,该命令会删除 target 目录。可以直接在命令行中执行该命令,只需要切换到项目所在的路径下即可。

2)编译:mvn complie,该命令会编译 src/main/java 目录下的源码。同时,Maven 还会处理在 src/main/resources 目录下的资源文件,确保它们作为编译的一部分。

不过,很遗憾的是,执行该命令会报错。该命令给出的提示是,查看 [Help 1] 给出的地址,我尝试了一下,可以将 mvn complie 命令替换为 mvn compiler:compile 命令执行,结果如下图所示。

编译后可以在 target 目录下查看字节码文件。

3)测试:mvn test,test 命令在运行时,会执行 compile 命令;而之前我们已经执行过一次 compile 命令,为了确保结果的准确性,可以执行 mvn clean test 命令确保测试之前没有残余物,结果如下图所示。

Maven 会通过 Surefire 插件,使用 pom.xml 文件中的测试提供者(通常是 Junit)运行测试。执行 test 命令不仅会运行测试,还会产生报告文件,此时 target 目录下的截图如下:

4)打包:mvn install,该命令会按照 pom.xml 文件中 <packaging> 指定的方式(本例为 jar)对编译结果打包。同时,还会把打包好的文件放到本地的 Maven 仓库中,以便其他项目把它当做依赖项使用。命令执行结果如下图所示。

查看本地的 Maven 仓库,可以看到刚刚打包好的文件。

06、最后

在 Maven 出现之前,流行的构建工具是 Ant;在 Maven 出现之后,还有一种新兴的构建工具 Gradle,它有意选择了和 Maven 相反的原则,不会强制使用者遵循刻板的构建周期。

总之,Maven 是一款优秀的构建工具,Java 项目的开发者很有必要熟练地掌握它。

おすすめ

転載: www.cnblogs.com/qing-gee/p/11124359.html