在以往的方式中,分公司想要使用总部的jar包,只能直接把jar包复制到开发工具中,但是总部也在持续开发最新的jar包,分公司为了使用最新的版本,只能再次复制,这样影响了开发效率。
为了解决公司同步开发所使用到的项目,出现maven项目管理工具。
在maven中jar包称为依赖。
使用maven管理软件的依赖(jar),避免团队反复的复制(jar)
maven管理工具具有依赖传递性,使用maven管理工具可以自动导入相关的依赖(jar)进行开发。
Maven项目对象模型 (POM),可以 通过一小段描述信息【配置信息】 来管理项目的 构建,报告和文档的项目管理工具软件。
下载地址(官网):http://maven.apache.org/
选择你要下载的版本
安装maven时,需要在jdk的环境下运行,需要安装好jdk后才能安装。
环境变量必须配置在jdk之后
新增MAVEN_HOME
在PATH中加入%MAVEN_HOME%/bin(添加在jdk之下)
Win+R 输入cmd进入命令窗口输入mvn -v 查看是否安装成功
看到以下信息即为安装成功
开发工具在运行项目时会用到一些依赖,这些依赖按照一定的规则存放在本地计算机下的一个目录路径下,这个目录称为maven的本地仓库
在maven安装目录下的conf目录有一个settings.xml文件,里面定义了本地仓库的地址
找到localRepository
可以定义本地仓库的地址,不定义默认在C:\Users\(用户名)\.m2\repository
可以更改目录路径:(本地仓库)
这些都是在网络上下载回来的依赖
普通的java项目:打包jar包
普通的web项目:打包war包
maven本身项目:打包pom包
示例:随便创建一个目录在导航栏输入cmd进入命令行窗口,输入一下代码
mvn archetype:generate -DarchetypeCatalog=internal -DgroupId=com.hotdas.maven.quickstart -DartifactId=simple -DarchetypeArtifactId=maven-archetype-quickstart -Dversion=1.0.0-snapshot
此时查看目录会发现多了一个文件夹,这就是我们刚刚创建的项目文件夹
java项目的目录结构:
–src : 代码的目录
–src/main: 源代码目录(包括java代码和配置)
–src/main/java : 代表java的码代码
–src/test : 测试代码目录
–src/test/java : java的测试代码
–pom.xml -->每个模目都有一个核心的配置文件pom
mvn archetype:generate -DarchetypeCatalog=internal -DgroupId=com.hotdas.maven.quickstart -DartifactId=simple1 -DarchetypeArtifactId=maven-archetype-webapp -Dversion=1.0.0-snapshot
(后面的命令运行,必须会运行前面的命令)
编译: mvn compile 将项目变成字节码文件
测试: mvn test 将项目中的test变成字节码文件
清除: mvn clean 将编译后的文件清除掉
打包: mvn package 将项目进行打包
运行项目: mvn run 运行当前项目
项目发布: mvn intall 将本地项目安装到仓库
项目部署: mvn deploy 将本地项目部署到生产环境
示例:
进入simple目录导航栏输入cmd,运行mvn package
打包成功
会多出target目录
mvn clean清除刚刚打包的内容
清除后target被删除
mvn eclipse:eclipse 将maven项目转换为eclipse项目
mvn eclipse:clean 将maven的eclipse配置清除
mvn idea:idea 将maven项目转换为idea项目
mvn idea:clean 将maven的idea配置清除
属性
localRepository:配置本地仓库目录
interactiveMode: 是否需要获取用户输入的模式
offline : 是否要离线模式下运行maven
pluginGroups: 插件组,在默认的情况下maven使用到的插件
proxies : 设置代理;通过代理访问外面的仓库
servers : 配置服务器的配置 例如:安全配置待
mirrors: 镜像库 默认使用全球最大的中央仓库
profiles: 配置多种参数
profile: 配置单个参数
activeProfiles: 让多个配置生效
activeProfile: 让单个配置生效
1、菜单栏选择File–>settings
2、选择Build,Execution,Deployment–>Build Tools–>Maven
选择自己的maven环境和settings.xml
(1)点击Create new Project
2、点击maven,自行选择是否使用骨架创建,我这里不勾选,自己手敲,Next
3、输入GroupId(用于区分全球项目) 和ArtifactID(相当于项目名称)–>Next
4、选择项目的位置,finish
5、选择Enabled Auto-Import,自动导包
6、输入packaging标签选择项目的类型,我这里选择的是web项目
packaging:代表打包方式: pom,jar,war
Tomcat Application
Tomcat Application
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
这是我的网页
Hello World!
9、配置tomca运行web 项目
在pom.xml文件输入
org.apache.maven.plugins
maven-compiler-plugin
2.3.2
1.7
org.apache.tomcat.maven
tomcat7-maven-plugin
8080
/
点击右上角的Add Configuration…
点击+
选择maven
输入一下信息配置,点击Apply
配置好了tomcat
点击运行项目
在浏览器输入一下地址
运行效果
在maven中,仓库分为本地仓库和远程仓库。
其中远程仓库最大的是中央仓库。
在默认情况下,maven是从中央仓库下载依赖,当配置私服时,优先从私服下载依赖。
nexus:第三方仓库(完全免费)
artifactory:第三方仓库(收费)
坐标: 是区分全球所有项目的.
groupId : 组织 --用于区分公司全球项目的,一般是域名倒写
artifactId : 项目标识 – 用于区公司内容的项目
version : 版本号 --标注项目使用版本的
获取坐标方式: 从中央仓库获取
https://mvnrepository.com/
例如搜索mysql-connect
选择对应的版本
复制这里的内容
把复制的内容添加到项目的pom.xml文件,刷新
刷新后可以看到依赖已经下载
在本地仓库就会有对应的版本下载了
在项目中new一个module,跟创建工程的步骤一样。。
比如该工程需要依赖一个logs日志
finish后可以看到工程中多了logs模块,原工程中的pom.xml文件中的modules标签就代表了工程有什么模块
在logs模块中的pom.xml文件有parent标签代表着该模块的父类是什么
模块: 就是工程拆分的部分
使用:
logs
父项目(继承):
demo2
com.hotdas
1.0-SNAPSHOT
dependencies : 作用用于引入工程的依赖(jar)
例如:
mysql
mysql-connector-java
8.0.25
dependencyManagement : 作用用于管理依赖的版本,使用到时可以手动导入.不会出现传递导入.
8.0.25
5.0.0
mysql
mysql-connector-java
${mysql.version}
maven的两大核心: 依赖的管理和项目的构建.
例如: A --> B 那么导入A依赖时,B依赖也会导入进来.
依赖调节原则:
1. 路径近者优先原则
比如: A–>B–>C–>D (1.0版本)
H–>D–>E (2.0版本)
导入的是D版本为2.0版本
2. 路径相同,第一声明优先的原则.
例如: A–>C–>D (1.0版本)
H–>F -->D(2.0版本)
则导入D (1.0版本)
不想使用的依赖可以排除掉
spring-core
org.springframework
compile: 全范围有效,在编译阶段使用到的依赖
test: 测试范围 ,在测试阶段使用的依赖
provided: 编译与测试范围,在编译与测试使用到的依赖.
runtime: 运行时用到的范围,项目运行时使用到的依赖
system: 系统范围,项目使用到系统内置的函数等
依赖范围 | 对编译有效 | 对测试有效 | 对运行有效 |
---|---|---|---|
compile | 有 | 有 | 有 |
provided | 没 | 有 | 没 |
test | 有 | 有 | 没 |
runtime | 没 | 有 | 有 |
system | 有 | 有 | 没 |
因为远程的依赖无法下载到本地仓库,如果maven第一次下载依赖失败,maven是不会再次进行下载了(maven会在下载的jar包中生成一个.lastupdated的文件,用于标识该依赖,不再下载)
13.1. 安装私服
解压到一个目录下即可使用,为了跟自已系统中的应用程序端口不冲突,建议修改:
访问私服的服务器:
http://localhost:9999/nexus/#welcome
配置自已的私服:
nexus
*
Human Readable Name for this Mirror.
http://localhost:9999/nexus/content/groups/public/
13.3. 配置阿里的仓库
nexus
*
Human Readable Name for this Mirror.
https://maven.aliyun.com/repository/public
在下载本地仓库时,用powershell进入demo目录执行 mvn archetype:generate -DarchetypeCatalog=internal -DgroupId=com.hotdas.maven.quickstart -DartifactId=simple1 -DarchetypeArtifactId=maven-archetype-webapp -Dversion=1.0.0-snapshot出现ERROR:The goal you specified requires a project to execute but there is no POM in this directory (E:\demo). Please verify you invoked Maven from the correct directory. 和在demo目录导航栏cmd打开无法识别mvn命令,在桌面Win+R cmd打开进入demo目录成功执行
之后在demo导航栏目录cmd又可以成功执行,原因可能是配置的环境变量没那么快生效,所以无法识别
没加版本号之前下载失败,加了之后成功