首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >MAVEN 極速快速教程

MAVEN 極速快速教程

作者头像
张哥编程
发布2024-12-13 14:20:26
发布2024-12-13 14:20:26
4220
举报
文章被收录于专栏:云计算linux云计算linux

MAVEN 快速教程

一.MAVEN概念和安装

​ Maven 是专门用于构建和管理Java相关项目的工具,Maven是意第绪语,依地语(犹太人使用的国际语),表示专家的意思。 所以用Maven管理Java 项目,你就是专家了 -_-! Maven依靠约定(convention)并提供现成的可调用的目标(goal)。 Maven的主要优点是生命周期。只要项目基于一定的规则,它的整个生命周期都能够轻松搞定,代价是牺牲了灵活性。

maven优缺点?

优点:

  • 简化了项目构建,依赖管理:
  • 易于上手
  • 便于与持续集成工具(Jenkins)整合
  • 便于项目升级,无论是项目本身升级还是项目使用的依赖升级。
  • 有助于多模块项目的开发,一个模块开发好后,发布到仓库,依赖该模块时可以直接从仓库更新,而不用自己去编译。
  • maven有很多插件,便于功能扩展,比如生产站点,自动发布版本等

缺点:

  • maven是一个庞大的构建系统,学习难度大。
  • maven采用约定优于配置的策略(convention over configuration),虽然上手容易,但是一旦出了问题,难于调试。
  • 中国的网络环境差,很多repository无法访问,比如google code, jboss 仓库无法访问等。

1.1Maven 作用一:项目构建

项目格式统一,非常方便管理,使用了相同的项目结构 。

使用Maven管理的Java 项目都有着相同的项目结构

1.1.1 约定优于 配置

问题场景:如果你的团队是江南七怪一起来开发如何办?

Maven 提倡使用一个共同的标准目录结构,Maven 使用约定优于配置的原则,大家尽可能的遵守这样的目录结构。意义和好处在哪里?

如下所示:

目录

目的

${basedir}

存放pom.xml和所有的子目录

${basedir}/src/main/java

项目的java源代码

${basedir}/src/main/resources

项目的资源,比如说property文件,springmvc.xml

${basedir}/src/test/java

项目的测试类,比如说Junit代码

${basedir}/src/test/resources

测试用的资源

${basedir}/src/main/webapp/WEB-INF

web应用文件目录,web项目的信息,比如存放web.xml、本地图片、jsp视图页面

${basedir}/target

打包输出目录

${basedir}/target/classes

编译输出目录

${basedir}/target/test-classes

测试编译输出目录

Test.java

Maven只会自动运行符合该命名规则的测试类

~/.m2/repository

Maven默认的本地仓库目录位置

1.2Maven用处二:管理依赖

统一维护jar包

​ 比如说有3个Java 项目,这些项目都不是maven风格。那么这3个项目,就会各自维护一套jar包。 而其中有些jar包是相同的。问题就是当有很多项目的时候,jar包会重复导入多次,这个在前面讲J2SE或JAVAWEB,都看过了好多次。

​ 而maven风格的项目,首先把所有的jar包都放在"仓库“ 里,然后哪个项目需要用到这个jar包,只需要给出jar包的组织名、项目名、版本号就行了。 这样jar包就实现了共享,多个项目之间的jar包共享。好处:若干个jar包不用重复导入,省空间,非常方便。

Maven的主要目标是使开发人员能够在最短的时间内理解开发工作的完整状态。为了实现此目标,Maven处理了几个令人关注的领域:

  • 简化构建过程
  • 提供统一的构建系统
  • 提供优质的项目信息
  • 鼓励更好的开发实践
1.3.1 下载

官网下载:https://maven.apache.org/download.cgi

1.3.2 配置maven环境变量

我的电脑---》右键--》高级--》环境变量--》系统变量---》编辑--》新增:maven的地址

E:\apache-maven-3.6.1\bin,加过去之后,确定即可。

测试,打开cmd窗口,输入mvn -v

image-20200612092442924.png
image-20200612092442924.png

注意:mvn -v,测试时候,需要依赖一个JAVA_HOME的环境变量,还记得???

这个在之前讲JAVA基础的已经经过了,会后面的多个工具使用到,基本上已经成为一个默认的环境变量设置了。

image-20220214095121114.png
image-20220214095121114.png

核心:依赖管理和一键构建

二. 仓库概念

所谓的仓库就是用于存放项目需要的jar包的。 maven采用一个仓库,多个项目的方式,让多个项目共享一个仓库里的相同jar包。

​ jar包的管理,从哪里来,这是一个问题?有人说,拷贝过来,拷贝来,拷贝去,问题,中毒。版本不一致,开发者使用jar包版本不一致的问题。

2.1中央仓库

​ 远程存储jar包的仓库,是一个大的集中式仓库,maven

下载jar包---》从哪里下载--》maven中央仓库。maven 会默认从maven官方提供的服务器下载jar包。

仓库默认位置的配置文件:

E:\apache-maven-3.6.1\conf\settings.xml

使用阿里云下载jar包 而官方服务器在国外,因为大家都知道的原因,网速很慢,而且容易卡断。 为了便于快速下载相关jar包,可以使用国内maven 阿里云的下载地址:

打开:

代码语言:javascript
复制
E:\apache-maven-3.6.1\conf\settings.xml

在mirrors下新加一个阿里云的镜像地址:

代码语言:javascript
复制
<mirror>
            <id>alimaven</id>
            <mirrorOf>central</mirrorOf>
            <name>aliyun maven</name>
            <url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>
2.2 本地仓库

我们开发的时候,将远程中央仓库的jar包下载到本地仓库,项目读取本地仓库的jar。

setting文件修改仓库位置:

image-20200528093721253.png
image-20200528093721253.png
2.3 私服仓库

​ 公司里面,自己搭建的类似中央仓库的仓库,供本公司开发者使用的集中式仓库。

三.MAVEN原理和项目构建

​ Maven的基本原理很简单,采用远程中央仓库和本地仓库以及一个pom.xml,将pom.xml中定义的jar文件从远程仓库下载到本地仓库,各个应用使用同一个本地仓库的jar,同一个版本的jar只需下载一次,而且避免每个应用都去拷贝jar。如图1同时它采用了现在流行的插件体系架构,只保留最小的核心,其余功能都通过插件的形式提供,所以maven下载很小,在执行maven任务时,才会自动下载需要的插件。

3.1 POM概念

项目对象模型(Project Object Model)
wps1.jpg
wps1.jpg

Maven有一个官方的仓库,是一个微内核,通过网络将需要的文件下载到本地,通过官方仓库将相应的类库进行统一管理。

3.1.2 基本属性

groupId:项目或者组织的唯一标志,并且配置时生成路径也是由此生成,如org.myproject.mojo生成的相对路径为:/org/myproject/mojo

artifactId: 项目的通用名称

version: 项目的版本1.0.1[大版本、小版本、更新]

packaging: 打包机制,如pom,jar,maven-plugin,ejb,war,ear,rar,par

name: 用户描述项目的名称,无关紧要的东西,可选

url: 写明开发团队的网站,无关紧要,可选

其中groupId,artifactId,version,packaging这四项组成了项目的唯一坐标。一般情况下,前面三项就可以组成项目的唯一坐标了。

properties:声明一些常量。如:<file.encoding>UTF-8<file.encoding>引用时 ${file.encoding}

plugin:声明项目中所使用的插件,如热部署时,需要的tomcat插件(放build里面):

代码语言:javascript
复制
<plugins>
				<plugin>
					<artifactId>maven-war-plugin</artifactId>
				</plugin>
				<plugin>
					<artifactId>maven-compiler-plugin</artifactId>
				<configuration>
<!-- 源代码使用的开发版本 -->
					<source>1.7</source>
<!-- 需要生成的目标class文件的编译版本 -->
					<target>1.7</target>
				</configuration>
				</plugin>
				<plugin>
					<groupId>org.apache.tomcat.maven</groupId>
					<artifactId>tomcat7-maven-plugin</artifactId>
					<version>2.2</version>
					<configuration>
						<url>http://localhost:8080/manager/text</url>
						<path>/ccc</path>
						<server>tomcat</server>
						<username>tomcat</username>
						<password>tomcat</password>
				</configuration>
			</plugin>
		</plugins>

*依赖关系:(*依赖关系是POM的重要部分*)*

<dependency>

​ <groupId>junit</groupId>

​ <artifactId>junit</artifactId>

​ <version>3.8.1</version>

​ <scope>test</scope>

</dependency>

wps2.jpg
wps2.jpg

scope : 依赖范围,默认compile还有test,provided,runtime,system compile(编译范围)、provided(已提供范围)、runtime(运行时范围)、test(测试范围)、system(系统范围)。

3.2 如何新建一个maven项目
1.配置maven

IDEA和Maven要建立关联

image-20200605145434829.png
image-20200605145434829.png
image-20200605145443266.png
image-20200605145443266.png
image-20200605145616471.png
image-20200605145616471.png
2.创建新项目
image-20200605145705501.png
image-20200605145705501.png

3.创建maven项目

image-20200605145917600.png
image-20200605145917600.png
image-20200605150027480.png
image-20200605150027480.png
image-20200605150100711.png
image-20200605150100711.png

4.maven项目结构

image-20200605150329661.png
image-20200605150329661.png

5.jar依赖

image-20200605150636816.png
image-20200605150636816.png
image-20200605150732318.png
image-20200605150732318.png

查看jar包位置:

image-20200605161131487.png
image-20200605161131487.png

6.测试

在test-->java下新建TestMysql类

代码语言:javascript
复制
public class TestMysql {
    public static void main(String[] args) {
        //jdbc:加载驱动;
        try {
            Class.forName("com.mysql.jdbc.Driver");
           
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

四.jar冲突

image-20200715121245526.png
image-20200715121245526.png

4.2父子工程

image-20200715122138460.png
image-20200715122138460.png
image-20200715122421844.png
image-20200715122421844.png

父子工程之间不用建立关系,继承关系是先天的,不需要手动创建。

平级直接的叫依赖,依赖不是先天,依赖是后天手动创建的。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-03-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • MAVEN 快速教程
  • 一.MAVEN概念和安装
    • maven优缺点?
    • 1.1Maven 作用一:项目构建
      • 1.1.1 约定优于 配置
    • 1.2Maven用处二:管理依赖
      • 1.3.1 下载
      • 1.3.2 配置maven环境变量
  • 二. 仓库概念
    • 2.1中央仓库
    • 2.2 本地仓库
    • 2.3 私服仓库
  • 三.MAVEN原理和项目构建
    • 3.1 POM概念
      • 3.1.2 基本属性
      • 3.2 如何新建一个maven项目
    • 3.创建maven项目
    • 4.maven项目结构
    • 5.jar依赖
    • 6.测试
    • 四.jar冲突
    • 4.2父子工程
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档