【深入浅出Maven开发实战】「入门教程系列」带你零基础学习和开发使用Maven开发工具实战指南(实战技术总结)(一)https://developer.aliyun.com/article/1471014
将项目安装到本地仓库
如果需要将项目安装到本地仓库,可以直接执行mvn instali命令,注意,mvn install命令会包含上面的mvn package过程。
xml
复制代码
[INFO] /Users/alex/Documents/code/mine/develop-admin/src/main/java/com/hyts/common/secure/domain/SecureUserTokenServiceImpl.java: 有关详细信息, 请使用 -Xlint:unchecked 重新编译。 [INFO] [INFO] --- maven-resources-plugin:3.1.0:testResources (default-testResources) @ develop-archetype --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] skip non existing resourceDirectory /Users/alex/Documents/code/mine/develop-admin/src/test/resources [INFO] [INFO] --- maven-compiler-plugin:3.8.0:testCompile (default-testCompile) @ develop-archetype --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- maven-surefire-plugin:2.22.2:test (default-test) @ develop-archetype --- [INFO] Tests are skipped. [INFO] [INFO] --- maven-jar-plugin:3.2.2:jar (default-jar) @ develop-archetype --- [INFO] Building jar: /Users/alex/Documents/code/mine/develop-admin/target/develop-archetype-2.0.0.jar [INFO] [INFO] --- spring-boot-maven-plugin:2.7.0:repackage (repackage) @ develop-archetype --- [INFO] Replacing main artifact with repackaged archive [INFO] [INFO] --- spring-boot-maven-plugin:2.7.0:repackage (default) @ develop-archetype --- [INFO] Replacing main artifact with repackaged archive [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 16.794 s [INFO] Finished at: 2023-05-25T14:30:43+08:00 [INFO] ------------------------------------------------------------------------
安装到本地仓库之后,这个时候,点开自己的本地仓库,就可以看到相关的jar了。
IDEA使用Maven
不同于Eclipse,IDEA安装完成后,就可以直接使用Maven了。
Maven相关配置
IDEA中,Maven的配置在 File->Settings->Build,Execution,Deployment->Build Tools->Maven:
JavaSE工程创建
首先在创建一个工程时,选择Maven工程:
如果勾选上Create from archetype,则表示可以根据一个项目骨架(项目模板)来创建一个新的工程,不过,如果只是创建JavaSE项目,则不用选择项目骨架。直接Next即可。然后填入项目的坐标,即groupld和artifactld。
Maven依赖管理
Maven项目,如果需要使用第三方的控件,都是通过依赖管理来完成的。这里用到的一个东西就是pom.xml文件,概念叫做项目对象模型(POM,Project Object Model),我们在pom.xml中定义了Maven项目的形式,所以,pom.xml相当于是Maven项目的一个地图。就类似于web.xml文件用来描述三大web组件一样。
Maven的坐标
xml
复制代码
<dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>${easyexcel.version}</version> </dependency>
dependencies
在dependencies标签中,添加项目需要的jar所对应的maven坐标。
dependency
一个dependency标签表示一个坐标
groupld
团体、公司、组织机构等等的唯一标识。团体标识的约定是它以创建这个项目的组织名称的逆向域名(例如org.xxx)开头。一个Maven坐标必须要包含groupld。一些典型的groupld如apache的groupld是org,apache。
artifactld
artifactld相当于在一个组织中项目的唯一标识符。
version
一个项目的版本。一个项目的话,可能会有多个版本。如果是正在开发的项目,我们可以给版本号加上一个SNAPSHOT,表示这是一个快照版(新建项目的默认版本号就是快照版)
scope
表示依赖范围。
依赖范围 | 编译有效 | 测试有效 | 运行时有效 | 打包有效 |
complie | ✅ | ✅ | ✅ | ✅ |
test | ❎ | ✅ | ❎ | ❎ |
provided | ✅ | ✅ | ❎ | ❎ |
runtime | ❎ | ✅ | ✅ | ✅ |
system | ✅ | ✅ | ❎ | ❎ |
我们添加了很多依濑,但是不同依赖的使用范围是不一样的。最典型的有两个,一个是数据库驱动,另一个是单元测试。
数据库驱动,在使用的过程中,我们自己写代码,写的是DBC代码,只有在项目运行时,才需要执行MySQL驱动中的代码。所以,MySQL驱动这个依赖在添加到项目中之后,可以设置它的scope为runtime,编译的时候不生效。
单元测试,只在测试的时候生效,所以可以设置它的scope为test,这样,当项目打包发布时,单元测试的依赖就不会跟着发布。
依赖冲突
依赖冲突产生的原因
在图中, a.jar依赖b.jar, 同时a.jar依赖d.jar, 这个时候, a和b、d的关系是直接依赖的关系,a和c的关系是间接依赖的关系。
冲突解决
- 先定义先使用
- 路径最近原则(直接声明使用)以spring-context为例, 下图中红色表示失效的依赖(优先级低的依赖,即路径近的依赖优先使用):
上面这两条是默认行为。我们也可以手动控制。手动控制主要是通过排除依赖来实现,如下:
xml
复制代码
<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>${pagehelper.version}</version> <exclusions> <exclusion> <artifactId>mybatis</artifactId> <groupId>org.mybatis</groupId> </exclusion> </exclusions> </dependency>
这个表示从spring-context中排除spring-core依赖。
Maven私服
Maven仓库管理也叫Maven私服或者代理仓库。使用Maven私服有两个目的:
- 私服是一个介于开发者和远程仓库之间的代理。
- 私服可以用来部署公司自己的jar。
Nexus介绍
Nexus是一个强大的Maven仓库管理工具, 使用Nexus可以方便的管理内部仓库同时简化外部仓库的访问。官网是:www.sonatype.com/
Nexus安装
下载
下载地址:https://www.sonatype.com/download-os…
解压
将下载下来的压缩包,拷贝到一个没有中文的路径下,然后解压。
启动
解压之后, 打开cmd窗口(以管理员身份打开cmd窗口) , 然后定位了nexus解压目录,执行nexus.exe/run命令启动服务。
这个启动稍微有点慢,大概有1两分钟的样子,启动成功后,浏览器输入http://lcoalhost:8081打开管理页面。打开管理页面后,点击右上角上的登录按钮进行登录,默认的用户名/密码是admin/admin123。当然,用户也可以点击设置按钮,手动配置其他用户。
点击Repositories可以查看仓库详细信息
仓库类型
- proxy:表示这个仓库是一个远程仓库的代理,最典型的就是代理Maven中央仓库
- hosted:宿主仓库,公司自己开发的一些jar存放在宿主仓库中,以及一些在 Maven中央仓库上没有的jar
- group:仓库组,包含代理仓库和宿主仓库
- virtual:虚拟仓库
上传Jar
上传jar,配置两个地方:Maven的conf/settings.xml文件配置:
xml
复制代码
<!-- servers | This is a list of authentication profiles, keyed by the server-id used within the system. | Authentication profiles can be used whenever maven must make a connection to a remote server. |--> <servers> <!-- server | Specifies the authentication information to use when connecting to a particular server, identified by | a unique name within the system (referred to by the 'id' attribute below). | | NOTE: You should either specify username/password OR privateKey/passphrase, since these pairings are | used together. | <server> <id>deploymentRepo</id> <username>repouser</username> <password>repopwd</password> </server> --> <!-- Another sample, using keys to authenticate. <server> <id>siteServer</id> <privateKey>/path/to/private/key</privateKey> <passphrase>optional; leave empty if not used.</passphrase> </server> --> <server> <id>releases</id> <username>ali</username> <password>ali</password> </server> <server> <id>Snapshots</id> <username>ali</username> <password>ali</password> </server> </servers>
在要上传jar的项目的pom.xml文件中,配置上传路径:
xml
复制代码
<distributionManagement> <repository> <id>releases</id> <url>http://localhost:8081/repository/maven-releases/</url> </repository> <snapshotRepository> <id>snapshots</id> <url>http://localhost:8081/repository/maven-snapshots/</ur1> </snapshotRepository> </distributionManagement>
配置完成后,点击deploy按钮,或者执行mvn deploy命令就可以将jar上传到私服上。
下载Jar
直接在项目中添加依赖,添加完成后,额外增加私服地址即可:
xml
复制代码
<repositories> <repository> <id>local-repository</id> <url>http://localhost:8081/repository/maven-public/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories>
Maven是一款用于Java项目构建、依赖管理和项目信息管理的工具。在Java开发中,Maven已成为必不可少的工具之一。