概念
1,解决项目管理问题(就是一个项目管理工具,并且提供库依赖)
例如jar包太多,不利于管理
2,java需要一个统一的便捷的管理工具Maven
2.1 仓库:jar包仓库,便于用户使用jar包(怎么拿)
要什么jar包到去https://mvnrepository.com/artifact/mysql/mysql-connector-java/5.1.24下载即可
Maven是一个基于项目对象模型(POM)的概念的纯java开发的开源的项目管理工具。主要用来管理java项目,进行依赖管理(jar包依赖管理)和项目构建(项目编译、打包、测试、部署)。此外还能分模块开发,提高开发效率。
使用方法
1下载maven
2环境变量的配置(cmd里 mvn -v看有没有配置成功)
3建一个自己的本地库mavenRes
4maven文件夹下的D:\apache-maven-3.5.4\conf的setting设置好jdk版本和自己的本地库名字
5idea里面的设置;
》新建的不是java项目,而是基于maven的项目
》在下图设置好配置(有可能每次创建项目都要设置一下)
6,在创建好项目之后要分清你是否是一个java项目还是web项目
》如果是jar项目就在下图写个jar,web项目就写web
7,创建web项目有2种方式
》一个是在自己创建的普通项目中:手动添加web(在普通项目中既可以手动添加一个web也可以使用web骨架)
使用web骨架创建web,这是的创建的只是web你要修改一下包名为webapp并把它放到java的目录下
7.1pom.xml中设置 [war
7.2导入web依赖
导入 JSP 和 Servlet 和 JSTL依赖,使项目具有web编译环境
<dependency>
<!-- jstl 支持 -->
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<!-- servlet编译环境 -->
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<!-- jsp编译环境 -->
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
7.3创建web目录
7.4定义servlet和jsp
但是在定义件jsp文件时要加上isELIgnored=“false”让他能够识别el表达式。
》第二种直接通过依赖创建web项目
创建项目时要注意这里的项目都是web的要自己在main下建一个java包(和webapp同级)在去写com.qf后端代码。
完成之后还是要和上边的7.1-7.3一样进行配置
mawen项目的指令和使用
标识 | 周期 |
---|---|
compile | 缺省值,适用于所有阶段(测试运行,编译,运行,打包) |
provided | 类似compile,期望JDK、容器或使用者会提供这个依赖。如servlet-api.jar;适用于(测试运行,编译)阶段 |
runtime | 只在运行时使用,如 mysql的驱动jar,适用于(运行,测试运行)阶段 |
test | 只在测试时使用,适用于(编译,测试运行)阶段,如 junit.jar |
system | Maven不会在仓库中查找对应依赖,在本地磁盘目录中查找;适用于(编译,测试运行,运行)阶段 |
每一次进行修改都要走一下一下
记住部署是部署到自己的仓库。而在本公司的协同开发时是上传到私服。
war直接放到tomcat直接可以运行是因为有基本的jar包
自己项目的坐标
依赖具有传递性并且有就近元则
例如自己的一个项目里导入了一个mysql的依赖,而另一个项目再去依赖我的项目时就会传递性的依赖我原来项目的依赖(就是传递),但是当你在你的心得项目在导入mysql依赖时,他会就近的选择新项目的依赖(就近元则)。这种方法是好的,但是当发生冲突时 就要把一个依赖给排除。(方法如下)
私服(了解)
和tomcat类似要去安装(看md文件吧)
八、私服
8.1 概念
私服是架设在局域网的一种特殊的远程仓库,目的是代理远程仓库及部署第三方构件。
有了私服之后,当 Maven 需要下载依赖时,直接请求私服,私服上存在则下载到本地仓库;否则,私服请求外部的远程仓库,将构件下载到私服,再提供给本地仓库下载。
私服可以解决在企业做开发时每次需要的jar包都要在中心仓库下载,且每次下载完只能被自己使用,不能被其他开发人员使用
所谓私服就是一个服务器,但是不是本地层面的,是公司层面的,公司中所有的开发人员都在使用同一个私服
8.2 架构
无私服 | 有私服 |
---|---|
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zrCuJfn4-1596610866282)(Pictures/私服1.png)] | [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H4OHLwdV-1596610866285)(Pictures/私服2.png)] |
我们可以使用专门的 Maven 仓库管理软件来搭建私服,比如:Apache Archiva,Artifactory,Sonatype Nexus。这里我们使用 Sonatype Nexus
8.3 Nexus安装【了解】
8.3.1 下载
- 官网:https://blog.sonatype.com/
- 下载地址:https://help.sonatype.com/repomanager2/download/download-archives---repository-manager-oss
8.3.2 安装
下载nexus-2.x-bundle.zip,解压即可
nexus安装目录 |
---|
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xmg4aX7J-1596610866289)(Pictures/私服3.jpg)] |
8.4 启动【了解】
- 解压后在bin目录中执行:
- nexus install 在系统中安装nexus服务
- nexus uninstall 卸载nexus服务
- nexus start 启动服务
- nexus stop 停止服务
8.5 Nexus登录【了解】
访问私服:http://localhost:8081/nexus/
登录Nexus才可以使用Nexus管理功能 |
---|
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kfbJnI2E-1596610866293)(Pictures/私服_login.jpg)] [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UOIFBou3-1596610866296)(Pictures/私服_login2.jpg)] |
8.6 仓库列表【了解】
仓库类型 | 描述 |
---|---|
group | 包含多个仓库,通过group库的地址可以从包含的多个仓库中查找构件 |
hosted | 私服 服务器本地的仓库,其中存储诸多构件 |
proxy | 代理仓库,其会关联一个远程仓库, 比如中央仓库,aliyun仓库,向该仓库查找构件时,如果没有会从其关联的仓库中下载 |
仓库名 | 描述 |
---|---|
Releases | 存放项目的稳定发布版本,一个模块做完后如果需要共享给他人,可以上传到私服的该库 |
Snapshots | 对应不稳定的发布版本 |
3rd party | 存放中央仓库没有的 ,如ojdbc.jar,可以上传到私服的该库中 |
仓库列表 |
---|
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uLulaA5q-1596610866298)(Pictures/私服_list.jpg)] |
8.7 Maven配置私服 【重点
】
在maven中配置私服,使得maven可以从私服上获取构件
8.7.1 仓库组
而此时就有问题,私服中有很多仓库,每个仓库都有自己的url,则项目中配置哪个仓库呢 ?
私服中有一个仓库组,组中包含多个仓库,可以指定仓库组的url,即可从多个仓库中获取构件
仓库组 注意:proxy的仓库排序在最后 |
---|
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hK7uYJze-1596610866303)(Pictures/私服_deploy2.jpg)] |
8.7.2 Maven关联私服
配置settings.xml,设置私服地址、认证等信息
<servers>
<server>
<id>nexus-public</id> <!-- nexus的认证id -->
<username>admin</username> <!--nexus中的用户名密码-->
<password>admin123</password>
</server>
</servers>
<profiles>
<profile>
<id>nexus</id>
<repositories>
<repository>
<id>nexus-public</id> <!--nexus认证id 【此处的repository的id要和 <server>的id保持一致】-->
<!--name随便-->
<name>Nexus Release Snapshot Repository</name>
<!--地址是nexus中仓库组对应的地址-->
<url>http://localhost:8081/nexus/content/groups/public/</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
<pluginRepositories> <!--插件仓库地址,各节点的含义和上面是一样的-->
<pluginRepository>
<id>nexus-public</id> <!--nexus认证id 【此处的repository的id要和 <server>的id保持一致】-->
<!--地址是nexus中仓库组对应的地址-->
<url>http://localhost:8081/nexus/content/groups/public/</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>yourjdk</activeProfile>
<!-- 使私服配置生效 -->
<activeProfile>nexus</activeProfile>
</activeProfiles>
至此,Maven项目中需要依赖时,Maven会从私服中下载
8.8 Maven项目部署到私服
执行 :mvn deploy 即可将项目部署到私服对应的仓库中,此时项目中的打包方式多为jar
但需要提前在项目的pom.xml中配置部署私服仓库位置,如下:
...
<dependencies>
.....
</dependencies>
<!-- 在项目的pom.xml中 配置私服的仓库地址,可以将项目打jar包部署到私服 -->
<distributionManagement>
<repository>
<id>nexus-public</id> <!-- nexus认证id -->
<url>http://localhost:8081/nexus/content/repositories/releases</url>
</repository>
<snapshotRepository>
<id>nexus-public</id> <!-- nexus认证id -->
<url>http://localhost:8081/nexus/content/repositories/snapshots</url>
</snapshotRepository>
</distributionManagement>
</project>
注意:如上的 repository的 id 依然是要和settings.xml中配置的server中的id 一致,才能通过私服的认证