Mavern:
项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。
此电脑->属性->高级系统设置->环境变量->系统变量->新建
在path变量的变量值后面添加;%MAVEN_HOME%\bin
修改settings文件localRepository标签的信息
a) 对jar包的统一管理。
a) 项目完成后对项目进行编译、测试、打包部署。
Maven仓库用来存放Maven管理的所有Jar包。分为:本地仓库 、私服和 中央仓库。
在局域网内的一台服务器上。
当项目编译时,Maven首先从本地仓库中寻找项目所需的Jar包,若本地仓库没有,再到Maven的中央仓库下载所需Jar包。
src
-main
–bin 脚本库
–java java源代码文件
–resources 资源库,会自动复制到classes目录里
–filters 资源过滤文件
–assembly 组件的描述配置(如何打包)
–config 配置文件
–webapp web应用的目录。WEB-INF、css、js等
-test
–java 单元测试java源代码文件
–resources 测试需要用的资源库
–filters 测试资源过滤库
在Maven中,坐标是Jar包的唯一标识,Maven通过坐标在仓库中找到项目所需的Jar包。
如下代码中,groupId和artifactId构成了一个Jar包的坐标。
若项目中多个Jar同时引用了相同的Jar时,会产生依赖冲突,但Maven采用了两种避免冲突的策略,因此在Maven中是不存在依赖冲突的。
本项目——>A.jar——>B.jar——>X.jar
本项目——>C.jar——>X.jar
若本项目引用了A.jar,A.jar又引用了B.jar,B.jar又引用了X.jar,并且C.jar也引用了X.jar。
在此时,Maven只会引用引用路径最短的Jar。
org.apache.shiro
shiro-spring
1.2.2
子pom配置:
父pom所在项目的groupId
父pom所在项目的artifactId
父pom所在项目的版本号
什么是pom?
pom(Project Object Model)作为项目对象模型。通过xml表示maven项目,使用pom.xml来实现。主要描述了项目:包括配置文件;开发者需要遵循的规则,缺陷管理系统,组织和licenses,项目的url,项目的依赖性,以及其他所有的项目相关因素。
setting.xml主要用于配置maven的运行环境等一系列通用的属性,是全局级别的配置文件;而pom.xml主要描述了项目的maven坐标,依赖关系,开发者需要遵循的规则,缺陷管理系统,组织和licenses,以及其他所有的项目相关因素,是项目级别的配置文件。
xxx
xxx
xxx
xxx
4.0.0
xxx
xxx
jar
1.0-SNAPSHOT
xxx-maven
http://maven.apache.org
A maven project to study maven.
jira
http://jira.baidu.com/banseon
Demo
[email protected]
[email protected]
[email protected]
http:/hi.baidu.com/banseon/demo/dev/
HELLO WORLD
banseon
[email protected]
Project Manager
Architect
demo
http://hi.baidu.com/xxx
No
-5
Project Manager
Architect
No
Apache 2
http://www.baidu.com/banseon/LICENSE-2.0.txt
repo
A business-friendly OSS license
scm:svn:http://svn.baidu.com/banseon/maven/banseon/banseon-maven2-trunk(dao-trunk)
scm:svn:http://svn.baidu.com/banseon/maven/banseon/dao-trunk
http://svn.baidu.com/banseon
demo
http://www.baidu.com/banseon
true/false
true/false
true/false
true/false
true/false
true/false
true/false
jdk版本,如:1.7
Windows XP
Windows
x86
5.1.2600
mavenVersion
2.0.3
/usr/local/hudson/hudson-home/jobs/maven-guide-zh-to-production/workspace/
/usr/local/hudson/hudson-home/jobs/maven-guide-zh-to-production/workspace/
true/false
true/false
true/false
true/false
true/false
true/false
banseon-repository-proxy
banseon-repository-proxy
http://192.168.1.169:9999/repository/
default
org.apache.maven
maven-artifact
3.8.1
jar
test
spring-core
org.springframework
true
true/false
true/false
banseon-maven2
banseon maven2
file://${basedir}/target/deploy
banseon-maven2
Banseon-maven2 Snapshot Repository
scp://svn.baidu.com/banseon:/usr/local/maven-snapshot
banseon-site
business api website
scp://svn.baidu.com/banseon:/var/www/localhost/banseon-web
value
一、 A依赖于B,B依赖于C(1.1版本);B就是A的直接依赖,C就是A的传递依赖。
导入依赖D,D依赖C(1.2版本)
二、 排除依赖:
三、 版本锁定(推荐使用)
添加依赖范围:默认是compile
Provided: 运行部署到tomcat不在需要
如果将servlet-api.jar设置为compile,打包后包含serlvet-api.jar,war包部署到tomcat跟tomcat中存在servlet-api.jar包冲突。导致运行失败。
解决:
总结:如果使用到tomcat自带jar包,将项目中依赖作用范围设置为:provided,其他可以默认
私服的搭建环境:
虚拟机:VMware® Workstation 12 Pro 12.5.7 build-5813279
操作系统:windows10
Nexus:2.14.5
Ip:192.168.149.129
子网掩码:255.255.255.0
网关:192.168.149.2
a) 访问https://www.sonatype.com/download-oss-sonatype 下载nexus安装包
b) 解压压缩包内的文件到指定目录,打开cmd进入nexus的bin目录,执行nexus install命令
c) 执行nexus start命令,启动nexus服务
d) 找到私服访问的url:http://localhost:8081/nexus/#welcome
私服页面:
默认用户名/密码:admin/admin123
hosted:宿主仓库
存放本公司开发的jar包(正式版本、测试版本、第三方:存在版权问题--Oracle)
proxy:代理仓库
代理中央仓库、Apache下测试版本的jar包
group:组仓库
将来连接组仓库。包含Hosted:宿主仓库,Proxy:代理仓库
a) 在maven目录下conf/settings.xml文件总servers标签下,认证:配置用户名密码
b) 在pom.xml文件中配置jar包上传路径url
c) 执行命令发布项目到私服
项目名称右键 --> Run As --> Maven Build…
dev
nexus
http://192.168.149.129:8081/nexus/content/groups/public/
true
true
public
Public Repositories
http://192.168.149.129:8081/nexus/content/groups/public/
Maven官方的中央仓库服务器在国外,下载速度很慢,有时网络还会卡掉,所以远程中央仓库采取阿里云镜像,在conf/settings文件的mirrors标签下设置如下内容:
alimaven
aliyun maven
http://maven.aliyun.com/nexus/content/groups/public/
central
Nexus创建仓库以及权限管理
一、 Nexus预定义用户的权限讲解
a) admin用户拥有对Nexus服务的完全控制,默认密码为 admin123。
b) deployment:该用户能够访问Nexus,浏览仓库、搜索,并且上传部署构件,但无法对Nexus进行任何配置,默认密码为 deployment123
c) anonymous:该用户对应了所有未登录的匿名用户,可以浏览仓库并搜索,以下为anonymous用户的角色树,此用户没有浏览器登录功能。
d) Nexus 预定义了一些常用且重要的角色:
在3.x版本中Nexus只预定义了两个重要角色的内容
一、 为项目创建jar包的发布版仓库和快照版仓库
二、 为项目仓库建立权限
创建成功后我们在特权列表中可以看见
三、 针对创建的特权建立相应的角色
四、 创建用户,并指定拥有上述权限的用户
对于一个大型的项目,如果我们直接作为一个工程开发,由于相互之间的依赖我们只能从头到尾由一组人开发,否则就会出现一个类好多人开发,相互更改的混乱局面,这个时候我们就将项目进行了横向和纵向的拆分。
所谓的横向的拆分就是我们平常说的三层架构,将项目分成了web层,service层、dao层(web层也被叫做表现层,service层也被叫做业务层,dao层也被持久层),可以理解为将一个功能模块的不同调用过程进行了水平方向的拆分。
所谓的纵向拆分就是将一个项目的多个功能模块进行了,可以理解为为了完成一个系统,深度(纵向)分析需要有哪些功能,然后将这些功能独立出来,进行了(纵向)拆分。
横向拆分后,每个功能模块进行了单独的开发之后,项目整合的时候就需要有一个能够整合这些项目或者模块的工程,这就是所谓聚合工程的意义。
1、在settings.xml文件中更改:
jdk-1.8
true
1.8
1.8
1.8
1.8
2、在项目中pom.xml文件中制定jdk:
org.apache.maven.plugins
maven-compiler-plugin
3.1
1.8