Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2200|回复: 4
打印 上一主题 下一主题

Maven学习笔记

[复制链接]

697

主题

1142

帖子

4086

积分

认证用户组

Rank: 5Rank: 5

积分
4086
跳转到指定楼层
楼主
发表于 2017-6-26 10:31:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 java 于 2017-6-26 10:53 编辑

https://www.w3cschool.cn/maven/

Maven - 概述Maven 是什么?
Maven 是一个项目管理和整合工具。Maven 为开发者提供了一套完整的构建生命周期框架。开发团队几乎不用花多少时间就能够自动完成工程的基础构建配置,因为 Maven 使用了一个标准的目录结构和一个默认的构建生命周期。
在有多个开发团队环境的情况下,Maven 能够在很短的时间内使得每项工作都按照标准进行。因为大部分的工程配置操作都非常简单并且可复用,在创建报告、检查、构建和测试自动配置时,Maven 可以让开发者的工作变得更简单。
Maven 能够帮助开发者完成以下工作:
  • 构建
  • 文档生成
  • 报告
  • 依赖
  • SCMs
  • 发布
  • 分发
  • 邮件列表
总的来说,Maven 简化了工程的构建过程,并对其标准化。它无缝衔接了编译、发布、文档生成、团队合作和其他任务。Maven 提高了重用性,负责了大部分构建相关的任务。
Maven 的历史
Maven 最初是在 Jakarta Turbine 项目中为了简化构建过程而设计的。项目中有几个子工程,每个工程包含稍有不同的 ANT 文件。JAR 文件使用 CVS 管理。
Apache 小组随后开发了 Maven,能够同时构建多个工程、发布工程信息、部署工程、在几个工程中共享 JAR 文件,并且协助团队合作。
Maven 的目标
Maven 的主要目的是为开发者提供
  • 一个可复用、可维护、更易理解的工程综合模型
  • 与这个模型交互的插件或者工具
Maven 工程结构和内容被定义在一个 xml 文件中 - pom.xml,是 Project Object Model (POM) 的简称,此文件是整个 Maven 系统的基础组件。详细内容请参考 Maven POM 部分。
约定优于配置
Maven 使用约定而不是配置,意味着开发者不需要再自己创建构建过程。
开发者不需要再关心每一个配置细节。Maven 为工程提供了合理的默认行为。当创建 Maven 工程时,Maven 会创建默认的工程结构。开发者只需要合理的放置文件,而在 pom.xml 中不再需要定义任何配置。
举例说明,下面的表格展示了工程源码文件、资源文件的默认配置,和其他一些配置。假定 ${basedir} 表示工程目录:
[td]
配置项默认值
source code${basedir}/src/main/java
resources${basedir}/src/main/resources
Tests${basedir}/src/test
Complied byte code${basedir}/target
distributable JAR${basedir}/target/classes
为了构建工程,Maven 为开发者提供了选项来配置生命周期目标和工程依赖(依赖于 Maven 的插件扩展功能和默认的约定)。大部分的工程管理和构建相关的任务是由 Maven 插件完成的。
开发人员不需要了解每个插件是如何工作的,就能够构建任何给定的 Maven 工程。详细内容请参考 Maven 插件部分。


Apache Maven 环境配置

Maven - 环境配置
Maven 是一个基于 Java 的工具,所以要做的第一件事情就是安装 JDK。
系统要求[td]
项目
要求
JDKMaven 3.3 要求 JDK 1.7 或以上
Maven 3.2 要求 JDK 1.6 或以上
Maven 3.0/3.1 要求 JDK 1.5 或以上
内存没有最低要求
磁盘Maven 自身安装需要大约 10 MB 空间。除此之外,额外的磁盘空间将用于你的本地 Maven 仓库。你本地仓库的大小取决于使用情况,但预期至少 500 MB
操作系统没有最低要求
步骤 1:检查 Java 安装
现在打开控制台,执行下面的 java 命令。
[td]
操作系统
任务
命令
Windows打开命令控制台c:\> java -version
Linux打开命令终端$ java -version
Mac打开终端machine:~ joseph$ java -version
我们来验证一下所有平台上的输出:
[td]
操作系统
输出
Windowsjava version "1.6.0_21"
Java(TM) SE Runtime Environment (build 1.6.0_21-b07)
Java HotSpot(TM) Client VM (build 17.0-b17, mixed mode, sharing)
Linuxjava version "1.6.0_21"
Java(TM) SE Runtime Environment (build 1.6.0_21-b07)
Java HotSpot(TM) Client VM (build 17.0-b17, mixed mode, sharing)
Macjava version "1.6.0_21"
Java(TM) SE Runtime Environment (build 1.6.0_21-b07)
Java HotSpot(TM)64-Bit Server VM (build 17.0-b17, mixed mode, sharing)
如果你没有安装 Java,从以下网址安装 Java 软件开发套件(SDK):http://www.oracle.com/technetwork/java/javase/downloads/index.html。我们假定你安装的 Java 版本为1.6.0_21。
步骤 2:设置 Java 环境
设置 JAVA_HOME 环境变量,并指向你机器上的 Java 安装目录。例如:
[td]
操作系统
输出
WindowsSet the environment variable JAVA_HOME to
C:\Program Files\Java\jdk1.6.0_21
Linuxexport JAVA_HOME=/usr/local/java-current
Macexport JAVA_HOME=/Library/Java/Home
将 Java 编译器地址添加到系统路径中。
[td]
操作系统
输出
Windows将字符串“;C:\Program Files\Java\jdk1.6.0_21\bin”添加到系统变量“Path”的末尾
Linuxexport PATH=$PATH: $JAVA_HOME/bin/
Macnot required
使用上面提到的 java -version 命令验证 Java 安装。
步骤 3:下载 Maven 文件
从以下网址下载 Maven 3.2.5:http://maven.apache.org/download.html
步骤 4:解压 Maven 文件
解压文件到你想要的位置来安装 Maven 3.2.5,你会得到 apache-maven-3.2.5 子目录。
[td]
操作系统
位置 (根据你的安装位置而定)
WindowsC:\Program Files\Apache Software Foundation\apache-maven-3.2.5
Linux/usr/local/apache-maven
Mac/usr/local/apache-maven
步骤 5:设置 Maven 环境变量
添加 M2_HOME、M2、MAVEN_OPTS 到环境变量中。
[td]
操作系统
输出
Windows使用系统属性设置环境变量。
M2_HOME=C:\Program Files\Apache Software Foundation\apache-maven-3.2.5
M2=%M2_HOME%\bin
MAVEN_OPTS=-Xms256m -Xmx512m
Linux打开命令终端设置环境变量。
export M2_HOME=/usr/local/apache-maven/apache-maven-3.2.5
export M2=$M2_HOME/bin
export MAVEN_OPTS=-Xms256m -Xmx512m
Mac打开命令终端设置环境变量。
export M2_HOME=/usr/local/apache-maven/apache-maven-3.2.5
export M2=$M2_HOME/bin
export MAVEN_OPTS=-Xms256m -Xmx512m
步骤 6:添加 Maven bin 目录到系统路径中
现在添加 M2 变量到系统“Path”变量中
[td]
操作系统
输出
Windows添加字符串 “;%M2%” 到系统“Path”变量末尾
Linuxexport PATH=$M2: $PATH
Macexport PATH=$M2: $PATH
步骤 7:验证 Maven 安装
现在打开控制台,执行以下 mvn 命令。
[td]
操作系统
输出
命令
Windows打开命令控制台c:\> mvn --version
Linux打开命令终端$ mvn --version
Mac打开终端machine:~ joseph$ mvn --version
最后,验证以上命令的输出,应该是像下面这样:
[td]
操作系统输出
WindowsApache Maven 3.2.5 (r801777; 2009-08-07 00:46:01+0530)
Java version: 1.6.0_21
Java home: C:\Program Files\Java\jdk1.6.0_21\jre
LinuxApache Maven 3.2.5 (r801777; 2009-08-07 00:46:01+0530)
Java version: 1.6.0_21
Java home: C:\Program Files\Java\jdk1.6.0_21\jre
MacApache Maven 3.2.5 (r801777; 2009-08-07 00:46:01+0530)
Java version: 1.6.0_21
Java home: C:\Program Files\Java\jdk1.6.0_21\jre
恭喜!你完成了所有的设置,开始使用 Apache Maven 吧。


回复

使用道具 举报

697

主题

1142

帖子

4086

积分

认证用户组

Rank: 5Rank: 5

积分
4086
沙发
 楼主| 发表于 2017-6-26 11:03:06 | 只看该作者
Apache Maven POM
Maven - POM
POM 代表工程对象模型。它是使用 Maven 工作时的基本组建,是一个 xml 文件。它被放在工程根目录下,文件命名为 pom.xml。
POM 包含了关于工程和各种配置细节的信息,Maven 使用这些信息构建工程。
POM 也包含了目标和插件。当执行一个任务或者目标时,Maven 会查找当前目录下的 POM,从其中读取所需要的配置信息,然后执行目标。能够在 POM 中设置的一些配置如下:
  • project dependencies
  • plugins
  • goals
  • build profiles
  • project version
  • developers
  • mailing list
在创建 POM 之前,我们首先确定工程组(groupId),及其名称(artifactId)和版本,在仓库中这些属性是工程的唯一标识。
POM 举例
  1. <project xmlns="http://maven.apache.org/POM/4.0.0"
  2.    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3.    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
  4.    http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5.    <modelVersion>4.0.0</modelVersion>

  6.    <groupId>com.companyname.project-group</groupId>
  7.    <artifactId>project</artifactId>
  8.    <version>1.0</version>

  9. </project>
复制代码
需要说明的是每个工程应该只有一个 POM 文件。
  • 所有的 POM 文件需要 project 元素和三个必须的字段:groupId, artifactId,version
  • 在仓库中的工程标识为 groupId:artifactId:version
  • POM.xml 的根元素是 project,它有三个主要的子节点:
[td]
节点描述
groupId这是工程组的标识。它在一个组织或者项目中通常是唯一的。例如,一个银行组织 com.company.bank 拥有所有的和银行相关的项目。
artifactId这是工程的标识。它通常是工程的名称。例如,消费者银行。groupId 和 artifactId 一起定义了 artifact 在仓库中的位置。
version这是工程的版本号。在 artifact 的仓库中,它用来区分不同的版本。例如:
com.company.bank:consumer-banking:1.0
com.company.bank:consumer-banking:1.1.


Super POM
所有的 POM 都继承自一个父 POM(无论是否显式定义了这个父 POM)。父 POM 也被称作 Super POM,它包含了一些可以被继承的默认设置。
Maven 使用 effective pom(Super pom 加上工程自己的配置)来执行相关的目标,它帮助开发者在 pom.xml 中做尽可能少的配置,当然这些配置可以被方便的重写。
查看 Super POM 默认配置的一个简单方法是执行以下命令:mvn help:effective-pom
在你的电脑上的任意目录下创建一个 pom.xml 文件,使用上面提到的示例 pom 中的内容。
在下面的例子中,我们在 C:\MVN\project 目录中创建了一个 pom.xml 文件。
现在打开命令控制台,到 pom.xml 所在的目录下执行以下 mvn 命令。
  1. C:\MVN\project>mvn help:effective-pom
复制代码
Maven 将会开始处理并显示 effective-pom。
  1. [INFO] Scanning for projects...
  2. [INFO] Searching repository for plugin with prefix: 'help'.
  3. [INFO] ------------------------------------------------------------------------
  4. [INFO] Building Unnamed - com.companyname.project-group:project-name:jar:1.0
  5. [INFO]    task-segment: [help:effective-pom] (aggregator-style)
  6. [INFO] ------------------------------------------------------------------------
  7. [INFO] [help:effective-pom {execution: default-cli}]
  8. [INFO]

  9. .....

  10. [INFO] ------------------------------------------------------------------------
  11. [INFO] BUILD SUCCESSFUL
  12. [INFO] ------------------------------------------------------------------------
  13. [INFO] Total time: < 1 second
  14. [INFO] Finished at: Thu Jul 05 11:41:51 IST 2012
  15. [INFO] Final Memory: 6M/15M
  16. [INFO] ------------------------------------------------------------------------
复制代码
Effective POM 的结果就像在控制台中显示的一样,经过继承、插值之后,使配置生效。
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- ================================================================= -->
  3. <!--                                                                   -->
  4. <!-- Generated by Maven Help Plugin on 2012-07-05T11:41:51             -->
  5. <!-- See: http://maven.apache.org/plugins/maven-help-plugin/           -->
  6. <!--                                                                   -->
  7. <!-- ================================================================= -->

  8. <!-- ================================================================= -->
  9. <!--                                                                   -->
  10. <!-- Effective POM for project                                         -->
  11. <!-- 'com.companyname.project-group:project-name:jar:1.0'              -->
  12. <!--                                                                   -->
  13. <!-- ================================================================= -->

  14. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/
  15. 2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 h
  16. ttp://maven.apache.org/xsd/maven-4.0.0.xsd">
  17.   <modelVersion>4.0.0</modelVersion>
  18.   <groupId>com.companyname.project-group</groupId>
  19.   <artifactId>project</artifactId>
  20.   <version>1.0</version>
  21.   <build>
  22.     <sourceDirectory>C:\MVN\project\src\main\java</sourceDirectory>
  23.     <scriptSourceDirectory>src/main/scripts</scriptSourceDirectory>
  24.     <testSourceDirectory>C:\MVN\project\src\test\java</testSourceDirectory>
  25.     <outputDirectory>C:\MVN\project\target\classes</outputDirectory>
  26.     <testOutputDirectory>C:\MVN\project\target\test-classes</testOutputDirectory>
  27.     <resources>
  28.       <resource>
  29.         <mergeId>resource-0</mergeId>
  30.         <directory>C:\MVN\project\src\main\resources</directory>
  31.       </resource>
  32.     </resources>
  33.     <testResources>
  34.       <testResource>
  35.         <mergeId>resource-1</mergeId>
  36.         <directory>C:\MVN\project\src\test\resources</directory>
  37.       </testResource>
  38.     </testResources>
  39.     <directory>C:\MVN\project\target</directory>
  40.     <finalName>project-1.0</finalName>
  41.     <pluginManagement>
  42.       <plugins>
  43.         <plugin>
  44.           <artifactId>maven-antrun-plugin</artifactId>
  45.           <version>1.3</version>
  46.         </plugin>
  47.         <plugin>
  48.           <artifactId>maven-assembly-plugin</artifactId>
  49.           <version>2.2-beta-2</version>
  50.         </plugin>
  51.         <plugin>
  52.           <artifactId>maven-clean-plugin</artifactId>
  53.           <version>2.2</version>
  54.         </plugin>
  55.         <plugin>
  56.           <artifactId>maven-compiler-plugin</artifactId>
  57.           <version>2.0.2</version>
  58.         </plugin>
  59.         <plugin>
  60.           <artifactId>maven-dependency-plugin</artifactId>
  61.           <version>2.0</version>
  62.         </plugin>
  63.         <plugin>
  64.           <artifactId>maven-deploy-plugin</artifactId>
  65.           <version>2.4</version>
  66.         </plugin>
  67.         <plugin>
  68.           <artifactId>maven-ear-plugin</artifactId>
  69.           <version>2.3.1</version>
  70.         </plugin>
  71.         <plugin>
  72.           <artifactId>maven-ejb-plugin</artifactId>
  73.           <version>2.1</version>
  74.         </plugin>
  75.         <plugin>
  76.           <artifactId>maven-install-plugin</artifactId>
  77.           <version>2.2</version>
  78.         </plugin>
  79.         <plugin>
  80.           <artifactId>maven-jar-plugin</artifactId>
  81.           <version>2.2</version>
  82.         </plugin>
  83.         <plugin>
  84.           <artifactId>maven-javadoc-plugin</artifactId>
  85.           <version>2.5</version>
  86.         </plugin>
  87.         <plugin>
  88.           <artifactId>maven-plugin-plugin</artifactId>
  89.           <version>2.4.3</version>
  90.         </plugin>
  91.         <plugin>
  92.           <artifactId>maven-rar-plugin</artifactId>
  93.           <version>2.2</version>
  94.         </plugin>
  95.         <plugin>
  96.           <artifactId>maven-release-plugin</artifactId>
  97.           <version>2.0-beta-8</version>
  98.         </plugin>
  99.         <plugin>
  100.           <artifactId>maven-resources-plugin</artifactId>
  101.           <version>2.3</version>
  102.         </plugin>
  103.         <plugin>
  104.           <artifactId>maven-site-plugin</artifactId>
  105.           <version>2.0-beta-7</version>
  106.         </plugin>
  107.         <plugin>
  108.           <artifactId>maven-source-plugin</artifactId>
  109.           <version>2.0.4</version>
  110.         </plugin>
  111.         <plugin>
  112.           <artifactId>maven-surefire-plugin</artifactId>
  113.           <version>2.4.3</version>
  114.         </plugin>
  115.         <plugin>
  116.           <artifactId>maven-war-plugin</artifactId>
  117.           <version>2.1-alpha-2</version>
  118.         </plugin>
  119.       </plugins>
  120.     </pluginManagement>
  121.     <plugins>
  122.       <plugin>
  123.         <artifactId>maven-help-plugin</artifactId>
  124.         <version>2.1.1</version>
  125.       </plugin>
  126.     </plugins>
  127.   </build>
  128.   <repositories>
  129.     <repository>
  130.       <snapshots>
  131.         <enabled>false</enabled>
  132.       </snapshots>
  133.       <id>central</id>
  134.       <name>Maven Repository Switchboard</name>
  135.       <url>http://repo1.maven.org/maven2</url>
  136.     </repository>
  137.   </repositories>
  138.   <pluginRepositories>
  139.     <pluginRepository>
  140.       <releases>
  141.         <updatePolicy>never</updatePolicy>
  142.       </releases>
  143.       <snapshots>
  144.         <enabled>false</enabled>
  145.       </snapshots>
  146.       <id>central</id>
  147.       <name>Maven Plugin Repository</name>
  148.       <url>http://repo1.maven.org/maven2</url>
  149.     </pluginRepository>
  150.   </pluginRepositories>
  151.   <reporting>
  152.     <outputDirectory>C:\MVN\project\target/site</outputDirectory>
  153.   </reporting>
  154. </project>
复制代码
在上面的 pom.xml 中,你可以看到 Maven 在执行目标时需要用到的默认工程源码目录结构、输出目录、需要的插件、仓库和报表目录。
Maven 的 pom.xml 文件也不需要手工编写。
Maven 提供了大量的原型插件来创建工程,包括工程结构和 pom.xml。
详细内容请参考 Maven - 插件Maven - 创建工程 部分的内容。

回复 支持 反对

使用道具 举报

697

主题

1142

帖子

4086

积分

认证用户组

Rank: 5Rank: 5

积分
4086
板凳
 楼主| 发表于 2017-6-26 11:19:45 | 只看该作者
Apache Maven 仓库什么是 Maven 仓库?
在 Maven 的术语中,仓库是一个位置(place),例如目录,可以存储所有的工程 jar 文件、library jar 文件、插件或任何其他的工程指定的文件。
Maven 仓库有三种类型:
  • 本地(local)
  • 中央(central)
  • 远程(remote)
本地仓库
Maven 本地仓库是机器上的一个文件夹。它在你第一次运行任何 maven 命令的时候创建。
Maven 本地仓库保存你的工程的所有依赖(library jar、plugin jar 等)。当你运行一次 Maven 构建,Maven 会自动下载所有依赖的 jar 文件到本地仓库中。它避免了每次构建时都引用存放在远程机器上的依赖文件。
Maven 本地仓库默认被创建在 %USER_HOME% 目录下。要修改默认位置,在 %M2_HOME%\conf 目录中的 Maven 的 settings.xml 文件中定义另一个路径。
  1. <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  2.    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3.    xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
  4.    http://maven.apache.org/xsd/settings-1.0.0.xsd">
  5.       <localRepository>C:/MyLocalRepository</localRepository>
  6. </settings>
复制代码
当你运行 Maven 命令,Maven 将下载依赖的文件到你指定的路径中。
中央仓库
Maven 中央仓库是由 Maven 社区提供的仓库,其中包含了大量常用的库。
中央仓库的关键概念:
  • 这个仓库由 Maven 社区管理。
  • 不需要配置。
  • 需要通过网络才能访问。
要浏览中央仓库的内容,maven 社区提供了一个 URL:http://search.maven.org/#browse。使用这个仓库,开发人员可以搜索所有可以获取的代码库。
远程仓库
如果 Maven 在中央仓库中也找不到依赖的库文件,它会停止构建过程并输出错误信息到控制台。为避免这种情况,Maven 提供了远程仓库的概念,它是开发人员自己定制仓库,包含了所需要的代码库或者其他工程中用到的 jar 文件。
举例说明,使用下面的 POM.xml,Maven 将从远程仓库中下载该 pom.xml 中声明的所依赖的(在中央仓库中获取不到的)文件。
  1. <project xmlns="http://maven.apache.org/POM/4.0.0"
  2.    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3.    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
  4.    http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5.    <modelVersion>4.0.0</modelVersion>
  6.    <groupId>com.companyname.projectgroup</groupId>
  7.    <artifactId>project</artifactId>
  8.    <version>1.0</version>
  9.    <dependencies>
  10.       <dependency>
  11.          <groupId>com.companyname.common-lib</groupId>
  12.          <artifactId>common-lib</artifactId>
  13.          <version>1.0.0</version>
  14.       </dependency>
  15.    <dependencies>
  16.    <repositories>
  17.       <repository>
  18.          <id>companyname.lib1</id>
  19.          <url>http://download.companyname.org/maven2/lib1</url>
  20.       </repository>
  21.       <repository>
  22.          <id>companyname.lib2</id>
  23.          <url>http://download.companyname.org/maven2/lib2</url>
  24.       </repository>
  25.    </repositories>
  26. </project>
复制代码
Maven 依赖搜索顺序
当我们执行 Maven 构建命令时,Maven 开始按照以下顺序查找依赖的库:
  • 步骤 1 - 在本地仓库中搜索,如果找不到,执行步骤 2,如果找到了则执行其他操作。
  • 步骤 2 - 在中央仓库中搜索,如果找不到,并且有一个或多个远程仓库已经设置,则执行步骤 4,如果找到了则下载到本地仓库中已被将来引用。
  • 步骤 3 - 如果远程仓库没有被设置,Maven 将简单的停滞处理并抛出错误(无法找到依赖的文件)。
  • 步骤 4 - 在一个或多个远程仓库中搜索依赖的文件,如果找到则下载到本地仓库已被将来引用,否则 Maven 将停止处理并抛出错误(无法找到依赖的文件)。





回复 支持 反对

使用道具 举报

697

主题

1142

帖子

4086

积分

认证用户组

Rank: 5Rank: 5

积分
4086
地板
 楼主| 发表于 2017-6-26 11:43:30 | 只看该作者
Apache Maven 外部依赖
Maven - 外部依赖
现在,如你所知道的,Maven的依赖管理使用的是 Maven - 仓库 的概念。但是如果在远程仓库和中央仓库中,依赖不能被满足,如何解决呢? Maven 使用外部依赖的概念来解决这个问题。
例如,让我们对在 Maven - 创建工程 部分创建的项目做以下修改:
  • 在 src 文件夹下添加 lib 文件夹
  • 复制任何 jar 文件到 lib 文件夹下。我们使用的是 ldapjdk.jar ,它是为 LDAP 操作的一个帮助库
现在,我们的工程结构应该像下图一样:
现在你有了自己的工程库(library),通常情况下它会包含一些任何仓库无法使用,并且 maven 也无法下载的 jar 文件。如果你的代码正在使用这个库,那么 Maven 的构建过程将会失败,因为在编译阶段它不能下载或者引用这个库。
为了处理这种情况,让我们用以下方式,将这个外部依赖添加到 maven pom.xml 中。
  1. <project xmlns="http://maven.apache.org/POM/4.0.0"
  2.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3.        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
  4.        http://maven.apache.org/maven-v4_0_0.xsd">
  5.        <modelVersion>4.0.0</modelVersion>
  6.        <groupId>com.companyname.bank</groupId>
  7.        <artifactId>consumerBanking</artifactId>
  8.        <packaging>jar</packaging>
  9.        <version>1.0-SNAPSHOT</version>
  10.        <name>consumerBanking</name>
  11.        <url>http://maven.apache.org</url>

  12.        <dependencies>
  13.           <dependency>
  14.              <groupId>junit</groupId>
  15.              <artifactId>junit</artifactId>
  16.              <version>3.8.1</version>
  17.              <scope>test</scope>
  18.           </dependency>

  19.           <dependency>
  20.              <groupId>ldapjdk</groupId>
  21.              <artifactId>ldapjdk</artifactId>
  22.              <scope>system</scope>
  23.              <version>1.0</version>
  24.              <systemPath>${basedir}\src\lib\ldapjdk.jar</systemPath>
  25.           </dependency>
  26.        </dependencies>

  27.     </project>
复制代码
上例中, <dependencies> 的第二个 <dependency> 元素 , 阐明了外部依赖的关键概念。
  • 外部依赖(library jar location)能够像其他依赖一样在 pom.xml 中配置。
  • 指定 groupId 为 library 的名称。
  • 指定 artifactId 为 library 的名称。
  • 指定作用域(scope)为系统。
  • 指定相对于工程位置的系统路径。
希望现在你懂得了有关外部依赖的知识,你将能够在你的 Maven 工程中指定外部依赖。


回复 支持 反对

使用道具 举报

697

主题

1142

帖子

4086

积分

认证用户组

Rank: 5Rank: 5

积分
4086
5#
 楼主| 发表于 2017-6-26 14:01:55 | 只看该作者
Apache Maven 快照Maven - 快照
大型软件应用程序通常由多个模块组成,这是多个团队工作于同一应用程序的不同模块的常见场景。例如一个团队工作负责应用程序的前端应用用户接口工程(app-ui.jar:1.0)),同时他们使用数据服务工程(data-service.jar:1.0)。
现在负责数据服务的团队可能正在进行修正 bug 或者增强功能,并快速迭代,然后他们几乎每天都会 release 工程库文件到远程仓库中。
现在如果数据服务团队每天上传新的版本,那么就会有下面的问题:
  • 每次数据服务团队发布了一版更新的代码时,都要告诉应用接口团队。
  • 应用接口团队需要定期更新他们的 pom.xml 来得到更新的版本
为了解决这样的情况,快照概念发挥了作用.
什么是快照?
快照是一个特殊的版本,它表示当前开发的一个副本。与常规版本不同,Maven 为每一次构建从远程仓库中检出一份新的快照版本。
现在数据服务团队会将每次更新的代码的快照(例如 data-service:1.0-SNAPSHOT)发布到仓库中,来替换旧的快照 jar 文件。
快照 vs 版本
对于版本,Maven 一旦下载了指定的版本(例如 data-service:1.0),它将不会尝试从仓库里再次下载一个新的 1.0 版本。想要下载新的代码,数据服务版本需要被升级到 1.1。
对于快照,每次用户接口团队构建他们的项目时,Maven 将自动获取最新的快照(data-service:1.0-SNAPSHOT)。
应用用户接口 pom.xml
应用用户接口工程正在使用 1.0 版本的数据服务的快照
  1. <project xmlns="http://maven.apache.org/POM/4.0.0"
  2.   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3.   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
  4.   http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5.   <modelVersion>4.0.0</modelVersion>
  6.   <groupId>app-ui</groupId>
  7.   <artifactId>app-ui</artifactId>
  8.   <version>1.0</version>
  9.   <packaging>jar</packaging>
  10.   <name>health</name>
  11.   <url>http://maven.apache.org</url>
  12.   <properties>
  13.      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  14.   </properties>
  15.   <dependencies>
  16.      <dependency>
  17.      <groupId>data-service</groupId>
  18.          <artifactId>data-service</artifactId>
  19.          <version>1.0-SNAPSHOT</version>
  20.          <scope>test</scope>
  21.      </dependency>
  22.   </dependencies>
  23. </project>
复制代码
数据服务 pom.xml
数据服务工程为每个微小的变化 release 1.0 快照
  1. <project xmlns="http://maven.apache.org/POM/4.0.0"
  2.   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3.   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
  4.   http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5.   <modelVersion>4.0.0</modelVersion>
  6.   <groupId>data-service</groupId>
  7.   <artifactId>data-service</artifactId>
  8.   <version>1.0-SNAPSHOT</version>
  9.   <packaging>jar</packaging>
  10.   <name>health</name>
  11.   <url>http://maven.apache.org</url>
  12.   <properties>
  13.      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  14.   </properties>
  15.   </project>
复制代码
虽然,对于快照,Maven 每次自动获取最新的快照,但你可以在任何 maven 命令中使用 -U 参数强制 maven 下载最新的快照。
  1. mvn clean package -U
复制代码
让我们打开命令控制台,进入 C:\ > MVN > app-ui 目录并执行以下 mvn 命令。
  1. C:\MVN\app-ui>mvn clean package -U
复制代码


回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|firemail ( 粤ICP备15085507号-1 )

GMT+8, 2024-11-22 16:30 , Processed in 0.067800 second(s), 18 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表