Maven 使用

Posted by 余腾 on 2019-04-06
Estimated Reading Time 9 Minutes
Words 2.1k In Total
Viewed Times

mvnRepository

  • Maven 是 Apache 软件基金会组织维护的一款自动化构建工具,专注服务于 Java 平台的项目构建和依赖管理。
  • 构建并不是创建,创建一个工程并不等于构建一个项目。
  • 生产环境下开发不再是一个项目一个工程,而是每一个模块创建一个工程。

构建过程的几个主要环节

  • 清理: 删除以前的编译结果,为重新编译做好准备。
  • 编译: 将 Java 源程序编译为字节码文件。
  • 测试: 针对项目中的关键点进行测试,确保项目在迭代开发过程中关键点的正确性。
  • 报告: 在每一次测试后以标准的格式记录和展示测试结果。
  • 打包: 将一个包含诸多文件的工程封装为一个压缩文件用于安装或部署。
    • Java 工程对应 jar 包,Web工程对应 war 包。
  • 安装: 在 Maven 环境下特指将打包的结果——jar 包或 war 包安装到本地仓库中。
  • 部署: 将打包的结果部署到远程仓库或将 war 包部署到服务器上运行

解压部署Maven核心程序


  • ① 检查 JAVA_HOME 环境变量
    1
    2
    C:\Users\稳丶>echo %JAVA_HOME%
    E:\Java\jdk1.8.0_191

  • ② Maven的核心程序
    1
    E:\Maven\apache-maven-3.6.0

  • ③ 配置环境变量
    1
    2
    MAVEN_HOME —— E:\Maven\apache-maven-3.6.0
    path —— E:\Maven\apache-maven-3.6.0\bin

  • ④ 查看Maven版本信息验证安装是否正确

    1
    2
    3
    4
    5
    6
    7
    C:\Users\稳丶>mvn -v

    Apache Maven 3.6.0 (97c98ec64a1fdfee7767ce5ffb20918da4f719f3; 2018-10-25T02:41:47+08:00)
    Maven home: E:\Maven\apache-maven-3.6.0\bin\..
    Java version: 1.8.0_191, vendor: Oracle Corporation, runtime: E:\Java\jdk1.8.0_191\jre
    Default locale: zh_CN, platform encoding: GBK
    OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"
  • ⑤ 修改本地仓库

    1
    2
    3
    4
    5
    1、默认本地仓库位置:~\.m2\repository 
    ~表示当前用户的家目录,例如:C:\Users\[你当前登录系统的用户名]
    2、指定本地仓库位置的配置信息文件:apache-maven-3.x.x\conf\settings.xml
    3、在根标签settings下添加如下内容:
    < localRepository>[本地仓库路径,也就是RepMaven.zip的解压目]< /localRepository>


Maven 核心概念

  • ①POM
  • ②约定的目录结构
  • ③坐标
  • ④依赖管理
  • ⑤仓库管理
  • ⑥生命周期
  • ⑦插件和目标
  • ⑧继承
  • ⑨聚合


①POM

  • Project Object Model:项目对象模型。Maven 工程的核心配置、将 Java 工程的相关信息封装为对象作为便于操作和管理的模型。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <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>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>4.0.0.RELEASE</version>

    </project>

②Maven 工程约定的目录结构

  • 约定 > 配置 > 编码
  • 目录结构
    • Project
      |—src
      |—|—main
      |—|—|—java
      |—|—|—resources
      |—|—test
      |—|—|—java
      |—|—|—resources
      |—pom.xml
  • 常用 Maven 命令
    • 执行与构建过程相关的Maven命令,必须进入pom.xml所在的目录。
  • mvn clean 清理
  • mvn compile 编译主程序
  • mvn test-compile 编译测试程序
  • mvn test 执行测试
  • mvn package 打包
  • mvn install 安装

③Maven 的坐标

  • 使用如下三个向量在 Maven 的仓库中唯一的确定一个 Maven 工程。
    • groupid:公司或组织的域名倒序 + 当前项目名称
    • artifactId:当前项目的模块名称
    • version:当前模块的版本
1
2
3
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.0.0.RELEASE</version>
  • gav 链接组成,本地地址
    1
    org/springframework/spring-core/4.0.0.RELEASE/spring-core-4.0.0.RELEASE.jar

④依赖管理

  • Maven 中最关键的部分,我们使用 Maven 最主要的就是使用它的依赖管理功能。
  • 对于自己编写的模块 需要 mvn install 安装后才可以 依赖使用
    1
    2
    3
    4
    5
    6
    7
    8
    <dependencies>
    <dependency>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
    <version>1.1.1</version>
    <scope>compile</scope>
    </dependency>
    </dependencies>

< scope>依赖的范围< /scope>

依赖的范围 对主程序是否有效 对测试程序是否有效 是否参与打包 开发 部署 运行
compile — (Spring-core) 参与
test — (Junit) 不参与
provided — (Servlet-api) 不参与

  • 依赖的传递性
    • 父工程(打包方式处要设置为 pom) 依赖的jar 会传递给 所依赖的工程
    • 非 compile 的依赖不能传递。所以在各个工程模块中,如果有需要就得重复声明依赖。
      • (test,provided)

  • 依赖的排除
    1
    2
    3
    4
    5
    6
    <exclusions>
    <exclusion>
    <groupId></groupId>
    <artifactId></artifactId>
    </exclusion>
    </exclusions>

  • 依赖的原则
    • 路径最短优先。
    • 路径相同时,先声明者优先。

  • 统一管理依赖的 jar 包版本
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <properties>
    <xxx>4.0.0.RELEASE</xxx>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>${xxx}</version>
    </dependency>
    </dependencies>

⑤仓库管理

  • 本地仓库:为当前本机电脑上的所有 Maven 工程服务。
  • 远程仓库(私服):架设在当前局域网环境下,为当前局域网范围内的所有 Maven 工程服务。
  • 中央仓库:架设在 Internet 上,为全世界所有 Maven 工程服务。
  • 中央仓库的镜像:架设在各个大洲,为中央仓库分担流量。减轻中央仓库的压力,同时更快的响应用户请求。

  • 仓库中的文件

    • [1] Maven 的插件
    • [2] 我们自己开发的项目的模块
    • [3] 第三方框架或工具的 jar 包
  • 不管是什么 jar 包,在仓库中都是按照坐标生成目录结构,可以通过统一的方式查询或依赖。


⑥生命周期

各个构建环节的执行顺序

  • Maven 有三套相互独立的生命周期,分别是:
    • ①Clean Lifecycle 在进行真正的构建之前进行一些清理工作。
    • ②Default Lifecycle 构建的核心部分,编译,测试,打包,安装,部署等等。
    • ③Site Lifecycle 生成项目报告,站点,发布站点。

⑦插件和目标


⑧继承

< scope>test< /scope> 由于test范围的依赖不能传递

  • 将所依赖的版本统一提取到 父 工程(打包方式处要设置为 pom),在子工程声明依赖时不指定版本,以父工程统一设定为准,便于修改。
  • 在子工程中声明引用父工程。
  • 此时如果子工程的 groupId 和 version 如果和父工程重复则可以删除。
  • 在父工程中统一 管理 jar 的依赖。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <dependencyManagement>
    <dependencies>
    <dependency>
    <groupId></groupId>
    <artifactId></artifactId>
    <version></version>
    <scope></scope>
    </dependency>
    </dependencies>
    </dependencyManagement>
1
2
3
4
5
6
7
//引用父工程
<parent>
<artifactId></artifactId>
<groupId></groupId>
<version></version>
<relativePath></relativePath>//以当前文件为基准的父工程 pom.xml文件的相对路径
</parent>

⑨聚合

  • 使用了聚合之后就可以一键批量进行 Maven 工程的安装、清理工作。
  • 在总的聚合工程中使用 modules/module 标签组合,指定模块工程的相对路径即可
  • 使用:在聚合工程的pom.xml上点击 —> run as —> maven install
1
2
3
4
<modules>
<module></module>
<module></module>
</modules>

集成插件

cargo 专业启动容器30年

Maven 插件 Tomcat

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.1</version>
<configuration>
<port>9090</port>
<path>/mgr</path>
<uriEncoding>UTF-8</uriEncoding>
<finalName>mgr</finalName>
<server>tomcat7</server>
</configuration>
</plugin>
</plugins>
</build>


解决Maven Web工程问题

  • The superclass “javax.servlet.http.HttpServlet” was not found on the Java Build Path
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <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.3-b06</version>
    <scope>provided</scope>
    </dependency>
    </dependencies>

  • 没有 Web.xml 文件 —— 项目 Project facets 点击 DynamicWeb

感谢阅读


If you like this blog or find it useful for you, you are welcome to comment on it. You are also welcome to share this blog, so that more people can participate in it. If the images used in the blog infringe your copyright, please contact the author to delete them. Thank you !