【Maven】2_Maven命令与基础构建

Maven基础概念

坐标

Maven使用坐标来确定具体需要的JAR包,其坐标包括:

  • groupId:公司或组织的id(一般为公司组织域名的倒序,通常会加上项目名称,如:com.maven)

  • artificatId:一个项目或者是项目的一个模块的id

  • version:版本号(SNAPSHOT表示快照、RELEASE表示正式版本)

Maven中坐标与文件夹的对应关系:

例如:

<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>

就要在如下文件夹目录找:

maven仓库文件夹\javax\servlet\servlet-api\2.5\servlet-api-2.5.jar

Maven项目的初始生成

使用如下命令在cmd对应文件夹目录下可以生成一个maven项目

mvn archetype:generate

该命令执行之后,会让你选择安装模式,直接回车就行(会默认选择7,快速开始)

之后要输入groupId:com.qinghe.maven

artificateId:pro01-maven-java

version直接回车

package也直接回车

再直接回车表示确定创建

创建成功实例:

在这里插入图片描述

将pom.xml中自带的jnuit版本改为4.12

自动生成的main和test下的App.java可以删除

POM.xml文件解读

project标签,跟标签,代表对当前项目进行配置、管理

<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标签,从Maven2开始就固定为4.0.0

  <modelVersion>4.0.0</modelVersion>

坐标信息

其中,packaging信息代表打包方式,取值为jar代表这是一个Java工程,取值为war代表这是一个web工程,取值为pom代表这是一个管理其他工程的工程。

  <groupId>com.qinghe.maven</groupId>
  <artifactId>pro01-maven-java</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

properties标签:

properties标签代表在Maven中定义的属性值,例如build.sourceEncoding就代表在构建时使用的字符集

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

dependencies标签:

dependencies标签代表依赖信息,通过该标签来导入Jar包

里面的dependency标签代表每一个依赖的信息(坐标)

其中的scope标签代表着依赖的作用范围

  <dependencies>
    <dependency> 
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

Pom文件结构

POM是指项目对象模型,学习Maven其实就是学习POM.xml的配置

Maven项目的目录结构(该目录结构由超级Pom生成,一般不进行修改)

MavenPro Maven工程所在文件

src 源码整体目录

main 主题程序目录

java Java源代码

com package目录(代码存放目录)

resources 配置文件目录

test 测试程序目录

java Java源代码(测试)

com package目录(测试)

一个小测试,在测试类中添加如下文件(CaculatorTest.java),注意该例子只是为了学习静态引入与测试实例的体会,不作为具体的内容。

package com.qinghe.maven;

import org.junit.Test;
import com.qinghe.maven.Calculator;

//静态引入,使用static进行import的类,不需要在下文前面的使用中加上类名。
import static org.junit.Assert.*;

public class CalculatorTest {
	@Test
	public void testSum() {
		Calculator calculator = new Calculator();
		
		int actualResult = calculator.sum(5, 3);
		
		int expectedResult = 8;
		
		//调用的Assert类中的断言方法,若两个形参相等,则测试通过,不抛出异常,若不相等则抛出异常,测试不通过。
		//因为使用了静态引入所以不需要加类名也不需要创建对象
		assertEquals(expectedResult, actualResult);
	}
}

Maven命令

Maven的命令必须在Pom.xml所在的文件夹下执行

编译

主程序编译:mvn compile

测试程序编译:mvn test-compile

主体程序编译结果存放的目录:target/classes

测试程序编译结果存放的目录:target/test-classes

执行编译之后会生成target目录,其中会存放编译之后的字节码文件等。

清理

mvn clean

会删除编译生成的target文件夹,达到清除编译生成的文件的效果。

测试

mvn test

该命令会运行test文件夹下的java文件,若文件没有编译,则会进行编译。

打包

mvn package

该命令会将java程序打包,java打jar包、web程序打war包,会存放在target中。

安装

mvn install(mvn clean install)

安装操作会将项目的jar包存入本地Maven仓库(根据POM.xml的坐标)。

安装操作也会将该项目中的POM.xml文件会变成jar包中的.pom文件。

生成Web工程的方式

生成Web项目的操作:

mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-webapp -DarchetypeVersion=1.4

这样的生成不会生成java文件夹,要在main文件夹下新建java/com/qinghe/maven的文件夹。

Jar包的下载:

https://mvnrepository.com

在该网站上进行jar包的搜索,并将依赖信息粘贴到POM.xml的依赖信息处就可以完成jar包的下载

在进行编译之后要进行打包(war包)和安装的操作

将打包之后的target文件夹下的.war文件放到tomcat文件夹下的webapps文件夹下即可完成部署,再访问对应的目录即可完成对网页的访问。

让web工程依赖java工程

只有web工程依赖java工程,没有java工程依赖web工程,即war包里面可以有jar包,jar包里面不能有war包。

在POM.xml文件中添加dependency依赖就会令web项目依赖于某个java项目,在后续的使用中,就和项目中本身就存在这个java项目的效果一致(实现了导入jar包的效果)

使用 mvn dependency:listmvn dependency:tree可以查看当前项目的依赖信息。

依赖的生效范围

依赖的生效范围由scope标签决定,而scope标签的取值一般可以有:

compile / test / provided / system / runtime / import

compile在main目录、test目录、开发过程中、部署到服务器的过程中都是有效的,99%的依赖作用范围都是compile

test在main目录下是无效的,并且在部署到服务器的过程中无效

provided在部署到服务器的过程中是无效的(不会打在war包中,例如servlet-api在服务器中是自带的,不需要引入依赖代入到war包中)(若重复会有隐患,可能会有jar包冲突导致的一系列问题)

依赖的生效范围

A依赖于B,B依赖于C,若B与C之间的依赖关系为compile,则A与C之间的依赖可以被传递过来,而若为test或provided则不能传递过来。

例如:sprintboot、springcloud就利用了依赖的传递性来简化对依赖的管理。

依赖的排除

当一个jar包因为依赖的传递性同时依赖了同一个jar包的不同版本,则会对项目有很大的隐患,这个时候就要用到依赖的排除,将不需要的哪个版本的依赖进行约束,使其不要传递进来。

示例:

<dependency>
	<!-- 这里是某个依赖的信息 --><!-- 在exclusion标签中进行依赖排除信息的配置,使用坐标确定要排除的jar包信息,不需要配置版本号 -->
	<exclusioin>
		<groupId>...</groupId>
		<artifactId>...</artifactId>
	</exclusion>
</dependency>

继承

Maven工程之间,A工程继承B工程,本质上是A工程中的POM.xml中的配置继承了B工程中的POM.xml的配置。

这种继承关系便于在父工程中统一管理配置信息。

操作

注:只有打包方式为pom的maven工程才可以作为父工程。

在生成maven工程之后,在生成工程的POM.xml中修改打包方式为pom。

POM.xml实例:

<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.qinghe.maven</groupId>
  <artifactId>pro03-maven-parent</artifactId>
  <version>1.0-SNAPSHOT</version>
  
  <!-- 作为父工程,修改打包方式 -->
  <packaging>pom</packaging>

  <name>pro03-maven-parent</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

之后进入pro03-maven-parent中再进行构建其他maven模块

在创建了子模块后,在父工程的POM.xml会自动生成如下代码

  <modules>  
	<module>pro04-maven-module</module>
    <module>pro05-maven-module</module>
    <module>pro06-maven-module</module>
  </modules>

而子模块中会改变为如下代码:

<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  
  <!-- 父工程的坐标 -->
  <parent>
    <groupId>com.qinghe.maven</groupId>
    <artifactId>pro03-maven-parent</artifactId>
    <version>1.0-SNAPSHOT</version>
  </parent>
  <!-- 子工程的坐标 -->
  <!-- 若子工程的groupId与父工程相同,则可以省略(一般都相同) -->
  <groupId>com.qinghe.maven</groupId>
  
  <!--  这个不可以省略-->
  <artifactId>pro04-maven-module</artifactId>
  
  <!-- 若子工程的version与父工程相同,则也可以省略 -->
  <version>1.0-SNAPSHOT</version>
  <name>pro04-maven-module</name>
  <url>http://maven.apache.org</url>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

在父工程中管理依赖

在父工程中使用如下标签进行管理(project标签下)。

  <dependencyMangement>
	<dependencies>
		<dependency>
			
		</denpendency>
	</dependencies>
  </dependencyMangement>

在父工程中管理的jar包。在子工程中也需要进行声明

    </dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
			
			<!-- 此处的版本号可以省略,若版本一定要与父工程统一管理的不同,也可以进行修改 -->
			<!-- 在此处的版本号会覆盖掉父工程中统一管理的版本号 -->
			<version>4.0.0.RELEASE</version>
	<dependency>

配置自定义属性

在properties标签下进行配置:

<!-- 标签和属性都可以自定义,相当于 String qinghe.spring.version = 4.2.0.RELEASE -->
<qinghe.spring.version>4.2.0.RELEASE</qinghe.spring.version>

在之后的使用要用如下配置:

<version>${qinghe.spring.version}</version>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值