【深入浅出Maven开发实战】「入门教程系列」带你零基础学习和开发使用Maven开发工具实战指南(实战技术总结)(二)

简介: 【深入浅出Maven开发实战】「入门教程系列」带你零基础学习和开发使用Maven开发工具实战指南(实战技术总结)

【深入浅出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的关系是间接依赖的关系。

冲突解决

  1. 先定义先使用
  2. 路径最近原则(直接声明使用)以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私服有两个目的:

  1. 私服是一个介于开发者和远程仓库之间的代理。
  2. 私服可以用来部署公司自己的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已成为必不可少的工具之一。

相关文章
|
3月前
|
XML 前端开发 Java
SpringMVC入门到实战------2、SpringMVC创建实例Hello SpringMVC(maven+tomcat)
这篇文章是SpringMVC框架的入门教程,详细指导了如何在IDEA中使用Maven和Tomcat创建SpringMVC工程,包括添加依赖、配置web.xml、编写控制器、创建配置文件、配置Tomcat服务器以及进行基本的测试,展示了一个简单的Hello SpringMVC示例。
SpringMVC入门到实战------2、SpringMVC创建实例Hello SpringMVC(maven+tomcat)
|
2月前
|
Java 应用服务中间件 测试技术
Maven学习笔记(一):Maven基础(基于命令行的学习和应用)
Maven 是一款 Java 项目构建工具,主要用于管理 jar 包及其依赖关系。 本文主要了解Maven基础知识及基础应用,旨在为之后的进一步学习奠定基础。 内容上几近全为学习《尚硅谷2022版Maven教程》整理所得。 仅供参考。
240 80
Maven学习笔记(一):Maven基础(基于命令行的学习和应用)
|
3月前
|
前端开发 Java 编译器
【前端学java】如何从前端视角快速学习Maven
【8月更文挑战第12天】如何从前端视角快速学习Maven
53 2
【前端学java】如何从前端视角快速学习Maven
|
3月前
|
Java 持续交付 项目管理
Maven是一款基于Apache许可的项目管理和构建自动化工具,在Java开发中极为流行。
Maven是一款基于Apache许可的项目管理和构建自动化工具,在Java开发中极为流行。它采用项目对象模型(POM)来描述项目,简化构建流程。Maven提供依赖管理、标准构建生命周期、插件扩展等功能,支持多模块项目及版本控制。在Java Web开发中,Maven能够自动生成项目结构、管理依赖、自动化构建流程并运行多种插件任务,如代码质量检查和单元测试。遵循Maven的最佳实践,结合持续集成工具,可以显著提升开发效率和项目质量。
52 1
|
5月前
|
存储 搜索推荐 Java
rodert教你学Maven-实战这一篇就够了(上)
rodert教你学Maven-实战这一篇就够了
50 1
 rodert教你学Maven-实战这一篇就够了(上)
|
3月前
|
设计模式 IDE Java
|
5月前
|
Java 关系型数据库 Maven
SpringBootWebProject学习4、maven打war包
SpringBootWebProject学习4、maven打war包
51 1
|
5月前
|
前端开发 Java 关系型数据库
SpringBootWebProject学习2、默认maven使用
SpringBootWebProject学习2、默认maven使用
30 1
|
5月前
|
XML Java 关系型数据库
SpringBootWebProject学习2、maven配置
SpringBootWebProject学习2、maven配置
55 1
|
4月前
|
Java 应用服务中间件 API
如何安装与使用Java EE 8、Servlet 3.0及Apache Maven进行高效开发
【7月更文第1天】搭建高效Java EE 8开发环境,包括安装JDK、选择WildFly或Payara Server作为应用服务器,以及安装Apache Maven。使用Maven创建Servlet 3.0 Web项目,编写 HelloWorldServlet,打包部署到服务器,通过访问特定URL测试应用。这一流程助力开发者实现快速原型和大型项目开发。
103 0

推荐镜像

更多