网站首页 > 技术教程 正文
# 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-download
- Mac本地测试直接使用
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)
猜你喜欢
- 2024-10-22 Aqua Security 揭示了重大的 Kubernetes 攻击事件
- 2024-10-22 ReconSpider:一款功能强大的高级OSINT框架
- 2024-10-22 Afuzz:一款功能强大的自动化Web路径模糊测试工具
- 2024-10-22 [hack]WiFi有毒:如何建立一个自动文件下载的网络接入点
- 2024-10-22 ANDRAX:最新的Android智能手机上的渗透测试平台
- 2024-10-22 浅谈云安全之K8S(云安全中,是可靠性的一个重要因素)
- 2024-10-22 PC Hunter v1.5.5|系统维护及手工杀毒利器
- 2024-10-22 JavaScript为什么要有Symbol 类型
- 2024-10-22 blog-hunter基于webMagic的博客爬取工具
- 2024-10-22 高达动画的背后!走近中村一夫(下)
你 发表评论:
欢迎- 最近发表
-
- linux CentOS检查见后门程序的shell
- 网络安全工程师演示:黑客是如何使用Nmap网络扫描工具的?
- Linux中ftp服务修改默认21端口等(linux修改ftp配置文件)
- Linux系统下使用Iptables配置端口转发,运维实战收藏!
- 谈谈TCP和UDP源端口的确定(tcp和udp的端口号相同吗)
- Linux 系统 通过端口号找到对应的服务及相应安装位置
- 快速查找NAS未占用端口!Docker端口秒级排查+可视化占坑双杀技
- 【知识杂谈#2】如何查看Linux的(本地与公网)IP地址与SSH端口号
- 如何在Linux中查询 DNS 记录,这三个命令可谓是最常用、最经典的
- 【Linux系统编程】特殊进程之守护进程
- 标签列表
-
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)
本文暂时没有评论,来添加一个吧(●'◡'●)