Maven入门

导读:本篇文章讲解 Maven入门,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

一,Maven安装和搭建

1.1 下载maven

下载地址:http://maven.apache.org/download.cgi

下载完成后直接解压缩到任意目录即可。

Maven的目录结构如下所示:

  • bin:保存了maven相关的命令,例如:mvn.bat。
  • boot:maven运行需要的类加载器;
  • conf:setting.xml整个maven工具的核心配置文件;
  • lib:maven运行依赖的jar包;

1.2 配置maven环境变量

MAVEN3.3以上版本需要安装JDK.17+版本。同时,需要还需要配置JAVA_HOME和MAVEN_HOME环境变量。

MAVEN_HOME的值就是Maven目录的根路径。

除此以外,建议把maven的bin目录配置到path环境变量中。

配置完成后,打开命令窗口,执行“mvn -v”命令。如果可以看到maven的版本信息,代表安装成功。

1.3 配置maven本地仓库

Maven仓库相当于一个文件服务器。它是用来保存jar包文件的地方。Maven项目可以从本地仓库中加载jar包,不需要手动把jar包导入到每一个项目中。

修改MAVEN_HOME/conf/settings.xml配置文件,然后查找localRepository节点,该节点就是maven本地仓库的路径。

1.4 搭建maven项目

1.4.1 创建Java项目

命令格式:

mvn archetype:generate [参数列表]

参数列表:

-DarchatypeCatelog=internal # 指定从互联网上下载
-DgroupId=com.xjy.maven.quickstart # 公司域名倒写,用于区分全球的不同项目
-DartifactId=simple # 项目名
-DarchetypeArtifactId=maven-archetype-quickstart
-Dversion=0.1.1-snapshot

创建成功后,项目的目录结构如下:

src
  |- main
      |- java : java的源代码
      |- test : 测试源码目录    
pom.xml : 项目配置文件

1.4.2 搭建web项目

搭建web项目与上面类似,就是把-DarchetypeArtifactId参数改为maven-archetype-webapp即可。

项目搭建后的目录结构如下所示:

src
  |- main
      |- webapp # web的根目录
          |- WEB-INF web项目的配置目录
      |- resources #web的配置文件目录
pom.xml : 项目配置文件

二,项目构建过程

一个大型的项目,其构建过程主要经历了以下几个阶段:

  • 清理:清理项目文件;
  • 编译:把java源文件编译成字节码文件;
  • 测试:运行单元测试;
  • 打包:对项目进行打包,例如jar包;
  • 部署:把项目发布到容器中。

maven简化了项目构建的繁琐工作,只需要执行一个命令就可以完成从清理,编译,测试,打包,部署的所有工作。

  • mvn clean:清理阶段命令;
  • mvn test:测试阶段命令;
  • mvn compile:编译阶段命令;
  • mvn package:打包阶段命令。

三,maven命令

  • mvn:compile 编译命令

  • mvn:test 测试命令

  • mvn:package 打包命令

  • mvn:install 该命令用于将项目打包成构件,并安装到本地的maven仓库中

  • mvn:deploy 该命令用于把项目发布到本地仓库或服务器

四,仓库

maven仓库:本地仓库,中央仓库,第三方仓库。

4.1 本地仓库

是保存在本地磁盘上。项目使用的jar包应该优先从本地下载。

maven配置文件:

<localRepository>D:\Program Files\MvnRepo</localRepository>

4.2 中央仓库

供maven下载到本地仓库使用,中央仓库是由maven团队自己来维护。

https://mvnrepository.com

4.3 第三方仓库

​ 称为“私服”。一般是由公司内部人创建的,只提供给公司内部员工使用。

​ 不过当我们引用外国的中央仓库网速太慢时,经常也会使用国内的第三方仓库,如阿里的:

<mirror>
        <id>alimaven</id>
        <name>aliyun maven</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
        <mirrorOf>central</mirrorOf>
    </mirror>

五,POM全景图

POM的英文全名为 Project Object Model,即项目对象模型,它是maven项目的核心配置文件。在pom文件中可以定义项目的坐标,项目依赖,项目信息,插件等等。

  • < project>:文件的根节点
  • < modelversion>:pom.xml使用的对象模型版本
  • < groupId>:项目名称,一般写项目的域名
  • < artifactId>:模块名称,子项目名或模块名称
  • < version>:产品的版本号
  • < packaging>:打包类型,一般有jar,war,pom等
  • < name>:项目的显示名,常用于maven生成的文档
  • < description>:项目描述,常用于maven生成的文档
  • < dependencies>:项目依赖构建配置,配置项目依赖构建的坐标
  • < build>:项目构建配置,配置编译,运行插件等。

完整的POM文件:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<!-- 项目名称,一般是公司域名的倒写 -->
	<groupId>com.entor</groupId>
	<!-- 模块名称 -->
	<artifactId>maven-day01</artifactId>
	<!-- 产品的版本号 -->
	<version>0.0.1-SNAPSHOT</version>
	<!-- 打包方式,一般是jar、war、pom三种方式 -->
	<packaging>war</packaging>

	<!-- 配置依赖关系 -->
	<dependencies>
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>servlet-api</artifactId>
			<version>2.5</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>javax.servlet.jsp</groupId>
			<artifactId>jsp-api</artifactId>
			<version>2.1</version>
			<scope>provided</scope>
		</dependency>
	</dependencies>

	<!-- 项目构建配置 -->
	<build>
		<!-- 配置插件 -->
		<plugins>
			<!-- 资源文件拷贝插件 -->
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-resources-plugin</artifactId>
				<version>2.7</version>
				<configuration>
					<encoding>UTF-8</encoding>
				</configuration>
			</plugin>
			<!-- java编译插件 -->
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.2</version>
				<configuration>
					<source>1.7</source>
					<target>1.7</target>
					<encoding>UTF-8</encoding>
				</configuration>
			</plugin>
			<!-- 配置Tomcat插件 -->
			<plugin>
				<groupId>org.apache.tomcat.maven</groupId>
				<artifactId>tomcat7-maven-plugin</artifactId>
				<configuration>
					<port>80</port>
					<path>/</path>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>

六,坐标

6.1 坐标格式

每个maven过程都需要定义本过程的坐标,坐标是maven对jar包的身份定义。

定义坐标的格式:

<dependency>
	<groupId></groupId>
	<artifactId></artifactId>
	<version></version>
	<scope></scope>
</dependency>

groupId:项目名,一般是公司域名的倒写

artifactId:模块名

version:产品版本号

scope:依赖范围,它的值可以是compile,test,provided,runtime,system。

如果没有指定依赖范围,默认就是compile范围。

  • compile:默认值,代表该jar包可以在编译,测试,运行中使用;
  • test:代表该jar包只能够在测试中使用,例如Junit;
  • provide:代表该jar包只能够在编译,测试中使用,运行时候有容器负责提供,例如servlet-api;
  • runtime:代表该jar包只能在运行时候使用,例如mysql的驱动

6.2 查找坐标

6.2.1 在maven仓库中手动查找

maven仓库地址:https://mvnrepository.com/

找到后,把jar包的坐标复制粘贴到项目的pom文件中即可。

6.2.2 在项目中查找

​ 在eclipse中,鼠标右键项目名,选择maven 》 add Dependency,然后在中间的搜索框中输入关键词(比如:mysql)。输入完成后会显示与它关联的所有jar包。我们只需要选择指定版本的jar即可。(本地仓库中已存在jar包)

七,jar的依赖冲突

方式一:按照近者优先和最后声明优先原则

方式二:依赖排除

可以在dependency节点下指定exclusions节点,该节点可以配置不需要依赖的项目。

<exclusions>
    <exclusion>
        <groupId></groupId>
        <artifactId></artifactId>
    </exclusion>
</exclusions>

方式三:锁定版本

锁定版本后,maven只会加载指定版本的jar包

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>5.1.9.RELEASE</version>
        </dependency>
    </dependencies>
</dependencyManagement>

锁定版本后,配置文件就无需再指定版本信息。

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <!-- <version>5.1.9.RELEASE</version> -->
</dependency>

八,Maven整合SSM

pom.xml

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>com.lmc</groupId>
	<artifactId>MavenTest</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>war</packaging>

	<name>MavenTest Maven Webapp</name>
	<!-- FIXME change it to the project's website -->
	<url>http://www.example.com</url>

	<properties>
		<spring.version>5.1.9.RELEASE</spring.version>
		<junit.version>4.9</junit.version>
		<mybatis.version>3.4.6</mybatis.version>
		<mysql.version>5.1.13</mysql.version>
		<mybatis-spring.version>1.3.2</mybatis-spring.version>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<maven.compiler.source>1.7</maven.compiler.source>
		<maven.compiler.target>1.7</maven.compiler.target>
	</properties>

	<dependencies>
	
		<!-- Spring依賴的jar包 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-test</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
		    <groupId>org.springframework</groupId>
		    <artifactId>spring-aspects</artifactId>
		    <version>${spring.version}</version>
		</dependency>
		<dependency>
		    <groupId>org.springframework</groupId>
		    <artifactId>spring-context-indexer</artifactId>
		    <version>${spring.version}</version>
		</dependency>
		<dependency>
		    <groupId>org.springframework</groupId>
		    <artifactId>spring-context-support</artifactId>
		    <version>${spring.version}</version>
		</dependency>
		<dependency>
		    <groupId>org.springframework</groupId>
		    <artifactId>spring-instrument</artifactId>
		    <version>${spring.version}</version>
		</dependency>
		<dependency>
		    <groupId>org.springframework</groupId>
		    <artifactId>spring-jms</artifactId>
		    <version>${spring.version}</version>
		</dependency>
		<dependency>
		    <groupId>org.springframework</groupId>
		    <artifactId>spring-orm</artifactId>
		    <version>${spring.version}</version>
		</dependency>
		<dependency>
		    <groupId>org.springframework</groupId>
		    <artifactId>spring-webflux</artifactId>
		    <version>${spring.version}</version>
		</dependency>
		<dependency>
		    <groupId>org.springframework</groupId>
		    <artifactId>spring-websocket</artifactId>
		    <version>${spring.version}</version>
		</dependency>
		<dependency>
		    <groupId>org.springframework</groupId>
		    <artifactId>spring-jdbc</artifactId>
		    <version>${spring.version}</version>
		</dependency>
		<dependency>
		    <groupId>org.springframework</groupId>
		    <artifactId>spring-tx</artifactId>
		    <version>${spring.version}</version>
		</dependency>
		<dependency>
		    <groupId>aopalliance</groupId>
		    <artifactId>aopalliance</artifactId>
		    <version>1.0</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-messaging</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<!-- 整合MyBatis依赖的jar包 -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>${mybatis.version}</version>
		</dependency>
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>${mysql.version}</version>
		</dependency>
		<!-- MyBatis和Spring整合所依赖的jar包 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-orm</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis-spring</artifactId>
			<version>${mybatis-spring.version}</version>
		</dependency>

		<!-- servlet和jsp的依賴 -->
		<!-- <dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>servlet-api</artifactId>
			<version>2.5</version>
			<scope>provided</scope>
		</dependency> -->
		<dependency>
		    <groupId>javax.servlet</groupId>
		    <artifactId>javax.servlet-api</artifactId>
		    <version>4.0.1</version>
		    <scope>provided</scope>
		</dependency>
		
		<dependency>
			<groupId>javax.servlet.jsp</groupId>
			<artifactId>jsp-api</artifactId>
			<version>2.1</version>
			<scope>provided</scope>
		</dependency>
		
		<!-- mysql的依賴 -->
		<dependency>
		    <groupId>mysql</groupId>
		    <artifactId>mysql-connector-java</artifactId>
		    <version>5.1.13</version>
		</dependency>
		
		<!-- json的依賴 -->
		<dependency>
		    <groupId>com.fasterxml.jackson.core</groupId>
		    <artifactId>jackson-databind</artifactId>
		    <version>2.9.8</version>
		</dependency>
		
		<dependency>
		    <groupId>com.fasterxml.jackson.core</groupId>
		    <artifactId>jackson-core</artifactId>
		    <version>2.9.8</version>
		</dependency>
		
		<dependency>
		    <groupId>com.fasterxml.jackson.core</groupId>
		    <artifactId>jackson-databind</artifactId>
		    <version>2.9.8</version>
		</dependency>
		
		<!-- jstl的依賴 -->
		<dependency>
		    <groupId>javax.servlet</groupId>
		    <artifactId>jstl</artifactId>
		    <version>1.2</version>
		</dependency>
		
		
		<!-- 文件上傳需要的依賴 -->
		<dependency>
		    <groupId>commons-fileupload</groupId>
		    <artifactId>commons-fileupload</artifactId>
		    <version>1.4</version>
		</dependency>
		
		<dependency>
		    <groupId>commons-io</groupId>
		    <artifactId>commons-io</artifactId>
		    <version>2.4</version>
		</dependency>
		
		<dependency>
		    <groupId>commons-logging</groupId>
		    <artifactId>commons-logging</artifactId>
		    <version>1.1.1</version>
		</dependency>
		
		<dependency>
		    <groupId>taglibs</groupId>
		    <artifactId>standard</artifactId>
		    <version>1.1.2</version>
		</dependency>
		
		
		
		<!-- Junit测试 -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.11</version>
			<scope>test</scope>
		</dependency>


	</dependencies>

	<build>
		<finalName>MavenTest</finalName>
		<pluginManagement><!-- lock down plugins versions to avoid using Maven 
				defaults (may be moved to parent pom) -->
			<plugins>

				<!-- 资源文件拷贝插件 -->
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-resources-plugin</artifactId>
					<version>2.7</version>
					<configuration>
						<encoding>UTF-8</encoding>
					</configuration>
				</plugin>

				<!-- java编译插件 -->
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-compiler-plugin</artifactId>
					<version>3.2</version>
					<configuration>
						<source>1.7</source>
						<target>1.7</target>
						<encoding>UTF-8</encoding>
					</configuration>
				</plugin>

				<!-- 配置Tomcat插件 -->
				<plugin>
					<groupId>org.apache.tomcat.maven</groupId>
					<artifactId>tomcat7-maven-plugin</artifactId>
					<configuration>
						<port>80</port>
						<path>/</path>
					</configuration>
				</plugin>
				
				<plugin>  
			        <groupId>org.apache.maven.plugins</groupId>  
			        <artifactId>maven-surefire-plugin</artifactId>  
			        <configuration>  
			          <!-- 不指定单元测试 -->
                      <skipTests>true</skipTests>
			        </configuration>  
			      </plugin> 
			      
			      <plugin>    
					    <groupId>org.apache.maven.plugin</groupId>    
					    <artifactId>maven-compiler-plugin</artifactId>    
					    <version>2.1</version>    
					    <configuration>    
					        <skip>true</skip>    
					    </configuration>    
					</plugin>    
			      
			   

				<plugin>
					<artifactId>maven-clean-plugin</artifactId>
					<version>3.1.0</version>
				</plugin>
				<!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
				<plugin>
					<artifactId>maven-resources-plugin</artifactId>
					<version>3.0.2</version>
				</plugin>
				<plugin>
					<artifactId>maven-compiler-plugin</artifactId>
					<version>3.8.0</version>
				</plugin>
				<plugin>
					<artifactId>maven-surefire-plugin</artifactId>
					<version>2.22.1</version>
				</plugin>
				<plugin>
					<artifactId>maven-war-plugin</artifactId>
					<version>3.2.2</version>
				</plugin>
				<plugin>
					<artifactId>maven-install-plugin</artifactId>
					<version>2.5.2</version>
				</plugin>
				<plugin>
					<artifactId>maven-deploy-plugin</artifactId>
					<version>2.8.2</version>
				</plugin>
			</plugins>
		</pluginManagement>
	</build>
</project>


除此之外,还需要按照maven项目的目录结构添加文件。

src/main/java 存放java源文件

src/main/resources 存放配置文件,比如applicationContext.xml、log4j.properties等等

src/main/webapp 存放静态资源

src/main/webapp/WEB-INF/web.xml web项目的核心配置文件

九,分模块搭建maven项目

如果一个系统的业务功能非常复杂,对于项目的维护难度就会增大。分模块就是把一个大型的项目按照不同的业务功能拆分成不同的子模块。每一个子模块都是一个独立的项目。子模块之间是互相独立,互不影响。

使用分模块搭建项目更加有利于项目的后期维护,提高系统的维护性。由于各个子模块之间是独立的,某个子模块的功能变更不会影响到其他子模块。

分模块搭建maven项目:

第一步:搭建一个父工程。父工程包含了所有子模块下的公共配置信息;

第二步:在父工程下创建子模块,比如web子模块、service子模块、dao子模块等等。

第三步:按照三层架构的依赖关系,为各个子模块添加依赖;

  • web 依赖于 service
  • service 依赖于 dao

第四步:在父工程中把所有子模块聚合在一起;

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/81659.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!