# Maven项目依赖管理和构建私有服务器## 目录第1章Maven概述第2章Maven快速入门第3章Maven基础操作第4章Maven高手进阶第5章Maven应用第6章课程总结
# Maven项目依赖管理和构建私有服务器## 第1章Maven概述### 1-1课程概述(02:26)### 1-2 Maven简介(05:49)### 1- 3 Maven环境搭建(04:52)## 第2章Maven快速入门### 2-1 Maven项目的创建(06:08)### 2-2第一个依赖和插件(05:57)### 2- 3运行项目的两种方式(04:57)### 2-4 Batch Mode问题(03:03)
- 问题:创建Maven项目,挂死在构建项目环节
[ INFO] Generating project in Batch mode
- 原因:防火墙,阻止/延缓了访问在国外的Maven仓库.
- Maven中央仓库国内镜像配置
<mirror>
<id>alimaven
</id>
<name>aliyun maven
</name>
<url>
http://maven.aliyun.com/nexus/content/groups/public/
</url>
<mirrorOf>central
</mirrorOf>
</mirror>### 2-5 Maven工具和项目的文件结构(06:08)
Maven内建变量
${basedir}表示项目根目录,即包含pom.xml文件的目录;
${version}表示项目版本;
${project.basedir}同
${basedir};
${project.baseUri}表示项目文件地址;
${maven.build.timestamp}表示项目构件开始时间;
${maven.build.timestamp.format}表示属性
${maven.build.timestamp}的展示格式,默认值为yyyyMMdd-HHmm,可自定义其格式,其类型可参考java.text.SimpleDateFormat。
${project.build.directory}表示主源码路径;
${project.build.sourceEncoding}表示主源码的编码格式;
${project.build.sourceDirectory}表示主源码路径;
${project.build.finalName}表示输出文件名称;
${project.version}表示项目版本,与
${version}相同;
${project.xxx} 当前pom文件的任意节点的内容
${env.xxx} 获取系统环境变量。
${settings.xxx} 指代了settings.xml中对应元素的值。
## 第3章Maven基础操作
### 3-1 Maven基础操作-仓库(08:54)
- ◆远程仓库/中央仓库
<mirror>
<id>alimaven
</id>
<name>aliyun maven
</name>
<url>
http://maven.aliyun.com/nexus/content/groups/public/
</url>
<mirrorOf>central
</mirrorOf>
</mirror>
- ◆本地仓库
- ◆私有服务器
### 3- 2 Maven配置(13:06)- 基础组件:配置
- ◆Maven核心组件:配置
- ◆全局配置: settings.xml
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
https://maven.apache.org/xsd/settings-1.0.0.xsd">
<!-- 本地仓库配置:默认~/.m2/repository[店家推荐修改配置] -->
<localRepository>${user.home}/.m2/repository
</localRepository>
<!-- 交互方式配置,读取用户输入信息[使用默认即可,很少修改] -->
<interactiveMode>true
</interactiveMode>
<!-- 是否启用独立的插件配置文件,一般很少启用[默认即可,很少修改] -->
<usePluginRegistry>false
</usePluginRegistry>
<!-- 是否启用离线构建模式,一般很少修改[如果长时间不能联网的情况下可以修改] -->
<offline>false
</offline>
<!-- 是否启用插件groupId自动扫描[很少使用,配置插件时建议全信息配置] -->
<pluginGroups>
<pluginGroup>org.apache.maven.plugins
</pluginGroup>
</pluginGroups>
<!--配置服务端的一些设置如身份认证信息(eg: 账号、密码) -->
<servers>
<!--服务器元素包含配置服务器时需要的信息 -->
<server>
<!--这是server的id(注意不是用户登陆的id)
该id与distributionManagement中repository元素的id相匹配。
-->
<id>server_001
</id>
<!--身份鉴权令牌。鉴权/认证用户名和鉴权密码表示服务器认证所需要的登录名和密码。 -->
<username>my_login
</username>
<!--身份鉴权密码 。鉴权/认证用户名和鉴权密码表示服务器认证所需要的登录名和密码-->
<password>my_password
</password>
<!--鉴权/认证时使用的私钥文件位置。和前两个元素类似
私钥位置和私钥密码指定了一个私钥的路径(默认是${user.home}/.ssh/id_dsa)-->
<privateKey>${usr.home}/.ssh/id_dsa
</privateKey>
<!--鉴权/认证时使用的私钥密码。 -->
<passphrase>some_passphrase
</passphrase>
<!--文件被创建时的权限。如果在部署的时候会创建一个仓库文件或者目录,这时候就可以使用权限(permission)。这两个元素合法的值是一个三位数字,其对应了unix文件系统的权限,如664,或者775。 -->
<filePermissions>664
</filePermissions>
<!--目录被创建时的权限。 -->
<directoryPermissions>775
</directoryPermissions>
</server>
</servers>
<mirrors>
<!-- 默认仓库配置给定的下载镜像位置 -->
<mirror>
<!-- 该镜像的唯一标识符。id用来区分不同的mirror元素。 -->
<id>nexus aliyun
</id>
<!-- 镜像名称 -->
<name>Nexus Aliyun
</name>
<!-- 该镜像的URL。构建系统会优先考虑使用该URL,而非使用默认的服务器URL。 -->
<url>http://downloads.planetmirror.com/pub/maven2
</url>
<!-- 被镜像的服务器的id。
如果我们要设置了一个Maven中央仓库(http://repo.maven.apache.org/maven2/)的镜像
就需要将mirrorOf设置成central。
保持和中央仓库的id central一致。 这样就能替代中央仓库的功能了-->
<mirrorOf>central
</mirrorOf>
</mirror>
</mirrors>
<proxies>
<!--代理元素包含配置代理时需要的信息 -->
<proxy>
<!--代理的唯一定义符,用来区分不同的代理元素。 -->
<id>myproxy
</id>
<!--该代理是否是激活的那个。true则激活代理。当我们声明了一组代理,而某个时候只需要激活一个代理的时候,该元素就可以派上用处。 -->
<active>true
</active>
<!--代理的协议。 协议://主机名:端口,分隔成离散的元素以方便配置。 -->
<protocol>http
</protocol>
<!--代理的主机名。协议://主机名:端口,分隔成离散的元素以方便配置。 -->
<host>proxy.somewhere.com
</host>
<!--代理的端口。协议://主机名:端口,分隔成离散的元素以方便配置。 -->
<port>8080
</port>
<!--代理的用户名,用户名和密码表示代理服务器认证的登录名和密码。 -->
<username>proxyuser
</username>
<!--代理的密码,用户名和密码表示代理服务器认证的登录名和密码。 -->
<password>somepassword
</password>
<!--不该被代理的主机名列表。该列表的分隔符由代理服务器指定;例子中使用了竖线分隔符,使用逗号分隔也很常见。 -->
<nonProxyHosts>*.google.com|ibiblio.org
</nonProxyHosts>
</proxy>
</proxies>
<profiles>
<profile>
<!-- profile的唯一标识 -->
<id>test
</id>
<!-- 自动触发profile的条件逻辑 -->
<activation />
<!-- 扩展属性列表 -->
<properties />
<!-- 远程仓库列表 -->
<repositories />
<!-- 插件仓库列表 -->
<pluginRepositories />
</profile>
</profiles>
<activeProfiles>
<!-- 要激活的profile id -->
<activeProfile>env-test
</activeProfile>
</activeProfiles>
<activation>
<!--profile默认是否激活的标识 -->
<activeByDefault>false
</activeByDefault>
<!--当匹配的jdk被检测到,profile被激活。例如,1.4激活JDK1.4,1.4.0_2,而!1.4激活所有版本不是以1.4开头的JDK。 -->
<jdk>1.5
</jdk>
<!--当匹配的操作系统属性被检测到,profile被激活。os元素可以定义一些操作系统相关的属性。 -->
<os>
<!--激活profile的操作系统的名字 -->
<name>Windows XP
</name>
<!--激活profile的操作系统所属家族(如 windows) -->
<family>Windows
</family>
<!--激活profile的操作系统体系结构 -->
<arch>x86
</arch>
<!--激活profile的操作系统版本 -->
<version>5.1.2600
</version>
</os>
<!--如果Maven检测到某一个属性(其值可以在POM中通过${name}引用),其拥有对应的name = 值,Profile就会被激活。如果值字段是空的,那么存在属性名称字段就会激活profile,否则按区分大小写方式匹配属性值字段 -->
<property>
<!--激活profile的属性的名称 -->
<name>mavenVersion
</name>
<!--激活profile的属性的值 -->
<value>2.0.3
</value>
</property>
<!--提供一个文件名,通过检测该文件的存在或不存在来激活profile。missing检查文件是否存在,如果不存在则激活profile。另一方面,exists则会检查文件是否存在,如果存在则激活profile。 -->
<file>
<!--如果指定的文件存在,则激活profile。 -->
<exists>${basedir}/file2.properties
</exists>
<!--如果指定的文件不存在,则激活profile。 -->
<missing>${basedir}/file1.properties
</missing>
</file>
</activation>
<properties>
<spring.Version>5.2.8
</spring.Version>
</properties>
<repositories>
<!--包含需要连接到远程仓库的信息 -->
<repository>
<!--远程仓库唯一标识 -->
<id>codehausSnapshots
</id>
<!--远程仓库名称 -->
<name>Codehaus Snapshots
</name>
<!--如何处理远程仓库里发布版本的下载 -->
<releases>
<!--true或者false表示该仓库是否为下载某种类型构件(发布版,快照版)开启。 -->
<enabled>false
</enabled>
<!--该元素指定更新发生的频率。Maven会比较本地POM和远程POM的时间戳。这里的选项是:always(一直),daily(默认,每日),interval:X(这里X是以分钟为单位的时间间隔),或者never(从不)。 -->
<updatePolicy>always
</updatePolicy>
<!--当Maven验证构件校验文件失败时该怎么做-ignore(忽略),fail(失败),或者warn(警告)。 -->
<checksumPolicy>warn
</checksumPolicy>
</releases>
<!--如何处理远程仓库里快照版本的下载。有了releases和snapshots这两组配置,POM就可以在每个单独的仓库中,为每种类型的构件采取不同的策略。例如,可能有人会决定只为开发目的开启对快照版本下载的支持。参见repositories/repository/releases元素 -->
<snapshots>
<enabled />
<updatePolicy />
<checksumPolicy />
</snapshots>
<!--远程仓库URL,按protocol://hostname/path形式 -->
<url>http://snapshots.maven.codehaus.org/maven2
</url>
<!--用于定位和排序构件的仓库布局类型-可以是default(默认)或者legacy(遗留)。Maven 2为其仓库提供了一个默认的布局;然而,Maven 1.x有一种不同的布局。我们可以使用该元素指定布局是default(默认)还是legacy(遗留)。 -->
<layout>default
</layout>
</repository>
</repositories>
</settings>
- ◆项目配置: pom.xml .
考虑到阅读体验,只展示了前100行,一共766行,查看或者翻阅所有请异步
https://gitee.com/zeus-maker/hunter/blob/master/build-tools/Maven/conf/pom_sample.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">
<!--
1、项目基本信息配置
-->
<!--父项目的坐标。如果项目中没有规定某个元素的值,那么父项目中的对应值即为项目的默认值。 坐标包括group ID,artifact ID和 version。 -->
<parent>
<!--被继承的父项目的构件标识符 -->
<artifactId />
<!--被继承的父项目的全球唯一标识符 -->
<groupId />
<!--被继承的父项目的版本 -->
<version />
<!--父项目的pom.xml文件的相对路径。相对路径允许你选择一个不同的路径。默认值是../pom.xml。Maven首先在构建当前项目的地方寻找父项目的pom,其次在文件系统的这个位置(relativePath位置),然后在本地仓库,最后在远程仓库寻找父项目的pom。 -->
<relativePath />
</parent>
<!--声明项目描述符遵循哪一个POM模型版本。模型本身的版本很少改变,虽然如此,但它仍然是必不可少的,这是为了当Maven引入了新的特性或者其他模型变更的时候,确保稳定性。 -->
<modelVersion>4.0.0
</modelVersion>
<!--项目的全球唯一标识符,通常使用全限定的包名区分该项目和其他项目。并且构建时生成的路径也是由此生成, 如com.mycompany.app生成的相对路径为:/com/mycompany/app -->
<groupId>asia.banseon
</groupId>
<!--构件的标识符,它和group ID一起唯一标识一个构件。换句话说,你不能有两个不同的项目拥有同样的artifact ID和groupID;在某个特定的group
ID下,artifact ID也必须是唯一的。构件是项目产生的或使用的一个东西,Maven为项目产生的构件包括:JARs,源码,二进制发布和WARs等。 -->
<artifactId>banseon-maven2
</artifactId>
<!--项目产生的构件类型,例如jar、war、ear、pom。插件可以创建他们自己的构件类型,所以前面列的不是全部构件类型 -->
<packaging>jar
</packaging>
<!--项目当前版本,格式为:主版本.次版本.增量版本-限定版本号 -->
<version>1.0-SNAPSHOT
</version>
<!--项目的名称, Maven产生的文档用 -->
<name>banseon-maven
</name>
<!--项目主页的URL, Maven产生的文档用 -->
<url>http://www.baidu.com/banseon
</url>
<!--项目的详细描述, Maven 产生的文档用。 当这个元素能够用HTML格式描述时(例如,CDATA中的文本会被解析器忽略,就可以包含HTML标签),
不鼓励使用纯文本描述。如果你需要修改产生的web站点的索引页面,你应该修改你自己的索引页文件,而不是调整这里的文档。 -->
<description>A maven project to study maven.
</description>
<!--项目创建年份,4位数字。当产生版权信息时需要使用这个值。 -->
<inceptionYear />
<!--项目相关邮件列表信息 -->
<mailingLists>
<!--该元素描述了项目相关的所有邮件列表。自动产生的网站引用这些信息。 -->
<mailingList>
<!--邮件的名称 -->
<name>Demo
</name>
<!--发送邮件的地址或链接,如果是邮件地址,创建文档时,mailto: 链接会被自动创建 -->
<post>Demo@126.com
</post>
<!--订阅邮件的地址或链接,如果是邮件地址,创建文档时,mailto: 链接会被自动创建 -->
<subscribe>Demo@126.com
</subscribe>
<!--取消订阅邮件的地址或链接,如果是邮件地址,创建文档时,mailto: 链接会被自动创建 -->
<unsubscribe>Demo@126.com
</unsubscribe>
<!--你可以浏览邮件信息的URL -->
<archive>http://localhost:8080/demo/dev/
</archive>
</mailingList>
</mailingLists>
<!--项目开发者列表 -->
<developers>
<!--某个项目开发者的信息 -->
<developer>
<!--SCM里项目开发者的唯一标识符 -->
<id>HELLO WORLD
</id>
<!--项目开发者的全名 -->
<name>youname
</name>
<!--项目开发者的email -->
<email>youname@qq.com
</email>
<!--项目开发者的主页的URL -->
<url />
<!--项目开发者在项目中扮演的角色,角色元素描述了各种角色 -->
<roles>
<role>Project Manager
</role>
<role>Architect
</role>
</roles>
<!--项目开发者所属组织 -->
<organization>demo
</organization>
<!--项目开发者所属组织的URL -->
<organizationUrl>http://www.xxx.com/
</organizationUrl>
<!--项目开发者属性,如即时消息如何处理等 -->
<properties>
<dept>No
</dept>
</properties>
<!--项目开发者所在时区, -11到12范围内的整数。 -->
<timezone>+8
</timezone>
</developer>
</developers>
<!--项目的其他贡献者列表 -->
<contributors>
<!--项目的其他贡献者。参见developers/developer元素 -->
<contributor>
<name />
<email />
<url />
<organization />
<organizationUrl />
<roles />
<timezone />
<properties />
</contributor>
</contributors> - 优先级
- pom.xml>settings.xmlnote>setting.xml
- 项目配置>用户配置>全局配置
- 1、项目基础信息配置- 2、项目构建环境配置- 3、项目仓库管理配置- 4、项目依赖管理配置- 5、项目报表信息配置- 6、项目部署分发配置### 3- -3 Maven软件坐标(06:25)- 基础组件: gav坐标
- ◆groupld: 项目ID,当前项目和其他项目的唯一标志.
- ◆artifactld:组件ID,当前项目中的子应用或者子组件的唯一标志 .
- ◆version: 版本号,迭代开发时标志的产品版本信息
- 扩展:版本号的意义
- 软件名称.主版本号.小版本号.阶段版本号.字母版本号
### 3- -4 Maven操作命令(08:28)
### 3- -5 Maven生命周期(04:00)- 基础组件:生命周期
- ◆clean lifecycle: 项目构建之前的清理环节
- ◆default lifecycle:项目编译和打包环节
- ◆site lifecycle: 项目报告、站点信息、发布环节
### 3- -6手工构建Maven项目(07:37)
### 3-7 MVN命令构建Maven项目(04:16)### 3- -8使用工具构建Maven项目(03:29)### 3- -9 archetype项目骨架加载慢的问题(02:57)### 3- -10自定义archetype项目骨架解决servlet版本问题(06:39)## 第4章Maven高手进阶### 4-1 Maven依赖范围管理(06:41)
- ◆什么是依赖范围?
- ◆都有哪些依赖范围?
- ◆为什么 要设置依赖范围?
### 4-2 Maven父子项目依赖传递(12:13)
- ◆什么是父子项目?
- ◆父项目 的依赖?
- ◆子项目的依赖?
### 4- -4 Maven项目常见插件(10:28)
- ◆什么是插件?
- ◆生命周期插件? .
resources/source/clean/compile
- ◆常用操作插件?
tomcat7/denpendency/jar/..
maven-antrun-plugin
maven-archetype-plugin
maven-assembly-plugin
maven-dependency-plugin
maven-enforcer-plugin
maven-
help-
plugin
maven-
release-
plugin
maven-resources-
plugin
maven-surefire-
plugin
build-helper-maven-
plugin
exec-maven-
plugin
jetty-maven-
plugin
versions-maven-
plugin### 4-5 Nexus私有服务器-搭建私有服务器(06:50)下载网址:https://www.sonatype.com/products/repository-oss-downloadMac本地测试直接使用
brew install nexus### 4-6 Nexus私有服务器-创建私有仓库(05:50) .### 4-7 Nexus私有服务器- _依赖下载和项目发布(11:13)## 第5章Maven应用### 5-1 Maven构建JavaSE项目(04:11)
- ◆JavaSE项目的特点
- ◆Intellij IDEA构建基于Maven的JavaSE项目
- ◆JavaSE项目运行的两种方式
### 5-2 Maven构建JavaWEB项目(11:04)### 5-3 Maven依赖直接冲突的问题(06:27)
<exclusions>
<exclusion>
<groupId>组名
</ groupId>
<artifactId>冲突的包名
</artifactId>
</exclusion>
</ exclusions>### 5- -4 Maven依赖传递冲突的问题(06:08)
## 第6章课程总结### 6-1课程总结(02:10)
- Maven基础
- 环境搭建,文件结构
- ◆项目构建,配置梳理
- ◆仓库,坐标、命令和生命周期
- Maven高级
- ◆>项目依赖的范围管理
- ◆父子项目的传递、聚合项目的管理
- 私有服务器的构建使用
- Maven应用
- ◆增强项目功能的插件
- ◆不同类型项目的构建
- ◆解决项目中的依赖冲突
## 参考资料
- [Maven项目依赖管理](
https://www.imooc.com/learn/1282)
以上就是关于《Maven项目依赖管理和构建私有仓库服务器和使用方法(maven项目配置仓库地址)》的全部内容,本文网址:https://www.7ca.cn/tg/40402.shtml,如对您有帮助可以分享给好友,谢谢。