Maven学习笔记(一):Maven基础(基于命令行的学习和应用)

简介: Maven 是一款 Java 项目构建工具,主要用于管理 jar 包及其依赖关系。本文主要了解Maven基础知识及基础应用,旨在为之后的进一步学习奠定基础。内容上几近全为学习《尚硅谷2022版Maven教程》整理所得。仅供参考。

一、初识Maven

简介

Maven是一款帮助Java项目构建的工具,同时,它也帮助管理jar包及其依赖关系。

优势

  1. 管理jar包与依赖关系:Maven仓库、私服
  2. 作为构建管理工具:编译、打包、持续集成

流程

  • 清理:删除上一次构建的结果,为下一次构建做好准备
  • 编译:Java源程序编译成*.class字节码文件
  • 测试:运行提前准备好的测试程序
  • 报告:针对刚才测试结果生成一个全面的信息
  • 打包:
  • Java工程:jar包
  • Web工程:war包
  • 安装:把一个Maven工程经过打包操作生成的jar包活war包存入Maven仓库
  • 部署:
  • jar包:把一个jar包部署到Nexus私服上
  • war包:借助相关Maven插件(如cargo),将war包部署到Tomcat服务器上

依赖

A工程里用到了B工程的类、接口等资源,那么可以说A依赖B。如junit-4.12依赖hamcrest-core-1.3。

工作机制

  • Maven核心程序:安装包
  • Maven命令:Maven插件jar包
  • Maven工程:Maven仓库:自己的jar包、框架或三方库jar包、Maven插件jar包(如果本地没有,去远处仓库下载)

二、安装与配置

下载Maven

下载地址:Maven – Welcome to Apache Maven

安装Maven

  1. 下载上图中对应平台的安装包,解压缩,得到Maven核心程序(建议路径非中文、无空格)

  1. 配置系统环境变量MAVEN_HOME ,path增加%MAVEN_HOME%\bin注意Maven运行在java环境中,所以需要先安装好jdk环境(类似Maven,见下图中%JAVA_HOME%相关配置)。

  1. 验证:mvn -v 输出版本信息,同mvn --version

配置Maven

  1. 配置本地仓库。配置后无需创建目录,首次运行会自行创建。默认地址是用户目录下USER\.m2\repository,但是这个地址一般在C盘(系统盘),而仓库随着使用的增加会不断扩大,占用系统盘空间,所以可以在配置文件中修改本地仓库地址。
<localRepository>D:\.m2\repository3</localRepository>

  1. 配置远程仓库。本地仓库中没有的资源,会从远端仓库中获取。中央仓库在国外,有时候访问非常慢,所以一般配置国内的镜像仓库,如阿里云提供的镜像仓库。找到settings.xml中的mirrors标签,注释掉原来的maven-default-http-blocker配置,将阿里云仓库配置复制过来。如下图:
<mirror>
  <id>aliyunmaven</id>
  <mirrorOf>*</mirrorOf>
  <name>阿里云公共仓库</name>
  <url>https://maven.aliyun.com/repository/public</url>
</mirror>

  1. 配置JDK版本Maven默认的jdk版本是1.5,实际常用通常为1.8+,所以需要在settings.xml配置全局生效,当然也可以在具体项目中单独配置。将如下配置,放到profiles标签里面。
<profile>
      <id>jdk-1.8</id>
      <activation>
        <activeByDefault>true</activeByDefault>
        <jdk>1.8</jdk>
      </activation>
      <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
      </properties>
    </profile>


三、应用Maven

核心概念

  1. 坐标:使用三个向量Maven仓库中唯一定位到一个jar包。gavgroupId+artifactId+version
  1. groupId:公司或组织的id,如: com.alibaba
  2. artifactId:一个项目或项目中的一个模块id,如druid
  3. version:模块的版本号,根据项目需要设定,如 1.2.9(开发时发布的快照版标记SNAPSHOT、正式发版RELEASE等)
  1. 位置:路径为groupId,文件名为artifactId-version.jar,如:druid-1.2.9.jar在本地仓库中的位置为.m2\respository\com\alibaba\druid-1.2.9.jar
  2. POM:Project Object Model,项目对象模型。类似于前端的DOM,将Maven工程抽象成一个对象模型。
  3. 约定的目录结构:基础配置在超级pom中配置,所有其他pom都是继承自超级pom。
  1. 约定目录结构的意义:为了让构建过程尽可能自动化完成
  2. 约定大于配置:就是给了默认配置,当然也可以自定义配置。
  1. pom文件解析

学习Maven后期主要就是学习pom.xml的使用

  • project标签:根标签,表示对当前工程进行配置、管理。
  • modelVersion标签:从Maven2开始就固定式4.0.0,代表当前pom.xml所采用的标签结构。
  • gav标签:坐标信息。
  • groupId:代表公司或组织开发的某个项目
  • artifactId:代表项目下的某个模块
  • version:代表当前模块的版本
  • packaging标签:打包方式。
  • 默认是jar,生成jar包,说明是一个java工程;
  • 改为war,生成war包,说明是一个web工程;
  • 改为pom,说明这个工程是用来管理其他工程的工程。
  • properties标签:在Maven中定义属性值    
  • project.build.sourceEncoding:在构建过程中读取源码的字符集
  • dependencies标签:配置具体依赖信息,可以包含多个dependency子标签。
  • dependency:配置一个具体的依赖信息
  • garvs(s:scope):坐标信息,导入jar包的坐标信息
  • scope:当前依赖的范围
  1. 命令这里涉及到Maven生命周期的概念。下面列出的是常用的命令,实际在执行其中任何一个时都会触发一个命令的链条,这个链条就叫做Maven的生命周期。详见 附录2:maven生命周期
  1. clean:清理本地编译
  2. compile:编译
  3. test-compile:编译测试代码
  4. test:运行测试代码
  5. package:打包到工程target目录
  6. install:安装到本地仓库
  7. deploy:发布到远程仓库
  8. mvn archetype:generate:创建一个标准的 Maven Java 工程
  9. mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-webapp -DarchetypeVersion=1.4:创建一个标准的 Maven Web 工程
  10. ……
  1. 依赖范围:scope标签,表示依赖包的作用域

范围

main目录(空间)

test目录(空间)

开发过程(时间)

部署到服务器(时间)

compile

test

×

×

provided

×

system

runtime

×

import (……)

-

-

-

-

  • compile:默认,开发部署全过程需要的,主体程序
  • test:测试,如junit
  • provided:已提供,如servlet-api,tomcat中存在,所以不需要打入war包;如果不写provided,可能产生冲突。
  • system:系统本地的jar包,见 附1:maven的基本操作之system scope
  • runtime:数据库jdbc的具体实现,开发过程中不需要实现,只要接口就可以。
  • import:引入其他项目的依赖(等到学习springboot时会了解到)
  1. 依赖的传递
  1. 只有compile范围的可以传递
  2. test/provided范围不可传递
  3. 必须要在本地仓库。如果是本地工程,则需要mvn install
  1. 依赖的排除
  1. 阻断依赖的传递(防止版本冲突)
  2. exclusions > exclusion标签
  1. 继承
  1. A工程的pom.xml继承B工程的pom.xml
  2. 使用父工程统一管理依赖信息的版本
  3. dependencyManagement标签
  1. 聚合
  1. modules > module 标签
  2. 父工程中包含的子工程,就叫做聚合
  3. 如同子工程组装成父工程,付子工程是has-a的关系
  4. 在父工程执行命令,子工程会按照以来顺序执行

应用实例

命令行模式下操作

示例工程源码

当首次执行某个命令时,会下载插件相关的一些jar包资源,如下图;之后再次执行不需要下载;清空本地仓库后,需要重新下载。下载完成后才执行。

mvn archetype:generate

创建工作空间目录(JAVA工程)

  • 调整创建的工程目录
  1. 上一步创建出来的工程中,默认引入了junit-3.8.1,这个版本比较老,我们改为4.13。

  1. 还有两个main和test目录的相同路径下,创建了一个测试用的java类,测试类删除,原因如下图,java类可以自行选择是否保留。


要求:运行Maven中的构建操作相关的命令时,必须进入pom.xml所在的目录。如果没在pom.xml所在目录运行构建命令,则会产生如下报错信息:

E:\mavenproject\project02>mvn compile
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  0.065 s
[INFO] Finished at: 2024-09-09T13:00:43+08:00
[INFO] ------------------------------------------------------------------------
[ERROR] The goal you specified requires a project to execute but there is no POM in this directory (E:\mavenproject\project02). Please verify you invoked Maven from the correct directory. -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MissingProjectException

mvn clean

清理target目录(已经编译或打包的文件)

E:\mavenproject\project02\promaven2java>mvn clean
[INFO] Scanning for projects...
[INFO]
[INFO] ---------------< com.sheeprunner.mvndemo:promaven2java >----------------
[INFO] Building promaven2java 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ promaven2java ---
[INFO] Deleting E:\mavenproject\project02\promaven2java\target
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  0.783 s
[INFO] Finished at: 2024-09-09T13:02:38+08:00
[INFO] ------------------------------------------------------------------------

mvn compile

编译

E:\mavenproject\project02\promaven2java>mvn compile
[INFO] Scanning for projects...
[INFO]
[INFO] ---------------< com.sheeprunner.mvndemo:promaven2java >----------------
[INFO] Building promaven2java 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ promaven2java ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory E:\mavenproject\project02\promaven2java\src\main\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ promaven2java ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to E:\mavenproject\project02\promaven2java\target\classes
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  0.809 s
[INFO] Finished at: 2024-09-09T13:07:49+08:00
[INFO] ------------------------------------------------------------------------

mvn test-compile

编译测试代码

E:\mavenproject\project02\promaven2java>mvn test-compile
[INFO] Scanning for projects...
[INFO]
[INFO] ---------------< com.sheeprunner.mvndemo:promaven2java >----------------
[INFO] Building promaven2java 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ promaven2java ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory E:\mavenproject\project02\promaven2java\src\main\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ promaven2java ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ promaven2java ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory E:\mavenproject\project02\promaven2java\src\test\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ promaven2java ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to E:\mavenproject\project02\promaven2java\target\test-classes
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  1.424 s
[INFO] Finished at: 2024-09-09T13:08:50+08:00
[INFO] ------------------------------------------------------------------------

mvn test

执行测试。执行测试会重新执行compile和test compile,其实是Maven核心概念之一的 生命周期

E:\mavenproject\project02\promaven2java>mvn test
[INFO] Scanning for projects...
[INFO]
[INFO] ---------------< com.sheeprunner.mvndemo:promaven2java >----------------
[INFO] Building promaven2java 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ promaven2java ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory E:\mavenproject\project02\promaven2java\src\main\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ promaven2java ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ promaven2java ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory E:\mavenproject\project02\promaven2java\src\test\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ promaven2java ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ promaven2java ---
[INFO] Surefire report directory: E:\mavenproject\project02\promaven2java\target\surefire-reports
-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running com.sheeprunner.mvndemo.TestStringUtil
testStringEmpty
testStringEmpty end
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.052 sec
Results :
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  3.069 s
[INFO] Finished at: 2024-09-09T13:10:48+08:00
[INFO] ------------------------------------------------------------------------

mvn package

打包

E:\mavenproject\project02\promaven2java>mvn package
[INFO] Scanning for projects...
[INFO]
[INFO] ---------------< com.sheeprunner.mvndemo:promaven2java >----------------
[INFO] Building promaven2java 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ promaven2java ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory E:\mavenproject\project02\promaven2java\src\main\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ promaven2java ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ promaven2java ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory E:\mavenproject\project02\promaven2java\src\test\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ promaven2java ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ promaven2java ---
[INFO] Surefire report directory: E:\mavenproject\project02\promaven2java\target\surefire-reports
-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running com.sheeprunner.mvndemo.TestStringUtil
testStringEmpty
testStringEmpty end
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.056 sec
Results :
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ promaven2java ---
[INFO] Building jar: E:\mavenproject\project02\promaven2java\target\promaven2java-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  2.259 s
[INFO] Finished at: 2024-09-09T13:12:30+08:00
[INFO] ------------------------------------------------------------------------

target生成

mvn install

安装到本地仓库,包括压缩包和pom.xml

E:\mavenproject\project02\promaven2java>mvn clean install
[INFO] Scanning for projects...
[INFO]
[INFO] ---------------< com.sheeprunner.mvndemo:promaven2java >----------------
[INFO] Building promaven2java 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ promaven2java ---
[INFO] Deleting E:\mavenproject\project02\promaven2java\target
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ promaven2java ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory E:\mavenproject\project02\promaven2java\src\main\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ promaven2java ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to E:\mavenproject\project02\promaven2java\target\classes
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ promaven2java ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory E:\mavenproject\project02\promaven2java\src\test\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ promaven2java ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to E:\mavenproject\project02\promaven2java\target\test-classes
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ promaven2java ---
[INFO] Surefire report directory: E:\mavenproject\project02\promaven2java\target\surefire-reports
-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running com.sheeprunner.mvndemo.TestStringUtil
testStringEmpty
testStringEmpty end
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.057 sec
Results :
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ promaven2java ---
[INFO] Building jar: E:\mavenproject\project02\promaven2java\target\promaven2java-1.0-SNAPSHOT.jar
[INFO]
[INFO] --- maven-install-plugin:2.4:install (default-install) @ promaven2java ---
[INFO] Installing E:\mavenproject\project02\promaven2java\target\promaven2java-1.0-SNAPSHOT.jar to D:\.m2\repository3\com\sheeprunner\mvndemo\promaven2java\1.0-SNAPSHOT\promaven2java-1.0-SNAPSHOT.jar
[INFO] Installing E:\mavenproject\project02\promaven2java\pom.xml to D:\.m2\repository3\com\sheeprunner\mvndemo\promaven2java\1.0-SNAPSHOT\promaven2java-1.0-SNAPSHOT.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  2.946 s
[INFO] Finished at: 2024-09-09T13:14:36+08:00
[INFO] ------------------------------------------------------------------------

生成web工程

mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-webapp -DarchetypeVersion=1.4
E:\mavenproject\project02>mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-webapp -DarchetypeVersion=1.4
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------< org.apache.maven:standalone-pom >-------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] --------------------------------[ pom ]---------------------------------
[INFO]
[INFO] >>> maven-archetype-plugin:3.2.1:generate (default-cli) > generate-sources @ standalone-pom >>>
[INFO]
[INFO] <<< maven-archetype-plugin:3.2.1:generate (default-cli) < generate-sources @ standalone-pom <<<
[INFO]
[INFO]
[INFO] --- maven-archetype-plugin:3.2.1:generate (default-cli) @ standalone-pom ---
[INFO] Generating project in Interactive mode
[WARNING] No archetype found in remote catalog. Defaulting to internal catalog
[INFO] Archetype repository not defined. Using the one from [org.apache.maven.archetypes:maven-archetype-webapp:1.0] found in catalog internal
Define value for property 'groupId': com.sheeprunner.mvndemo
Define value for property 'artifactId': promaven2web
Define value for property 'version' 1.0-SNAPSHOT: :
Define value for property 'package' com.sheeprunner.mvndemo: :
Confirm properties configuration:
groupId: com.sheeprunner.mvndemo
artifactId: promaven2web
version: 1.0-SNAPSHOT
package: com.sheeprunner.mvndemo
 Y: :
[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Archetype: maven-archetype-webapp:1.4
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: groupId, Value: com.sheeprunner.mvndemo
[INFO] Parameter: artifactId, Value: promaven2web
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Parameter: package, Value: com.sheeprunner.mvndemo
[INFO] Parameter: packageInPathFormat, Value: com/sheeprunner/mvndemo
[INFO] Parameter: package, Value: com.sheeprunner.mvndemo
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Parameter: groupId, Value: com.sheeprunner.mvndemo
[INFO] Parameter: artifactId, Value: promaven2web
[INFO] Project created from Archetype in dir: E:\mavenproject\project02\promaven2web
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  48.849 s
[INFO] Finished at: 2024-09-09T13:18:39+08:00
[INFO] ------------------------------------------------------------------------

注意:为了能够正常编译,需要引入Servlet-api依赖,可以在mvn官方中央仓库网站查找。

<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>
E:\mavenproject\project02\promaven2web>mvn compile
[INFO] Scanning for projects...
[INFO]
[INFO] ----------------< com.sheeprunner.mvndemo:promaven2web >----------------
[INFO] Building promaven2web Maven Webapp 1.0-SNAPSHOT
[INFO] --------------------------------[ war ]---------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ promaven2web ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory E:\mavenproject\project02\promaven2web\src\main\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ promaven2web ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to E:\mavenproject\project02\promaven2web\target\classes
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  0.724 s
[INFO] Finished at: 2024-09-09T13:31:07+08:00
[INFO] ------------------------------------------------------------------------

打war包

生成的war包,复制到tomcat下,重启tomcat就能运行啦!

Web工程依赖Java工程

把Java工程的gav引入到web工程的pom.xml中,编译后就可以使用Java工程中的资源。

  • mvn dependency:list  打印依赖列表
  • mvn dependency:tree  树形结构

继承与聚合

<packaging>pom</packaging>:子工程pom继承了父工程pom
<modules>  
  <!-- 构建父工程,子工程会按照依赖顺序依次构建 -->
  <!-- 假设son01依赖son02,son02依赖son03,则先构建son03,再构建son02,最后构建son01 -->
    <module>promaven2son01</module>
    <module>promaven2son02</module>
    <module>promaven2son03</module>
</modules>

依赖工程

总结

  1. Maven是一款Java项目构建工具,管理jar包机器依赖关系。
  2. Maven命令:mvn [插件名]:[命令名],其实是执行插件的命令。
  3. Maven的GAV模型:GroupId:ArtifactId:VersionId,也成为坐标,唯一标识一个jar包。
  4. Maven POM模型:Project Object Model,Maven的配置文件,包括项目信息、依赖信息、插件信息等。
  5. Maven目录结构默认固定如下,继承于超级pom,思想是约定大于配置:
  • pom.xml:项目配置文件
  • src/main/java:源代码目录
  • src/main/resources:资源文件目录
  • src/test/java:测试代码目录
  • src/test/resources:测试资源文件目录
  • target:编译输出目录
  1. Maven的依赖管理:依赖管理是Maven的核心功能,通过依赖管理可以解决项目依赖关系的问题,有利于版本管理,避免依赖冲突。
  2. 理解生命周期

附录

一、maven依赖范围之system scope

  1. 引入一个本地的jar包(如本例中的达梦方言包未发不到中央仓库,随达梦数据库发布)
<dependency>
 <groupId>com.epoint.3rdparty</groupId>
 <artifactId>DmDialect-for-hibernate</artifactId>
 <version>5.3</version>
 <scope>system</scope>
 <systemPath>${project.basedir}/src/main/resources/lib/DmDialect-for-hibernate-5.3.jar</systemPath>
</dependency>
<dependency>
 <groupId>com.epoint.3rdparty</groupId>
 <artifactId>KingBaseDialect-for-hibernate</artifactId>
 <version>4.0</version>
 <scope>system</scope>
 <systemPath>${project.basedir}/src/main/resources/lib/KingBaseDialect-for-hibernate-4.0.jar</systemPath>
</dependency>

二、maven的生命周期

以下内容来自文心灵码

 Maven的生命周期是指项目构建过程中的一系列阶段,这些阶段按照特定的顺序执行,以达到构建、测试和部署项目的目的。Maven的生命周期主要包括以下三个阶段:

Clean Lifecycle(清理生命周期)

这个生命周期的目的是清理项目构建目录下的内容。它包含以下阶段:

  • pre-clean:执行清理前需要完成的工作。
  • clean:清理上一次构建生成的文件。
  • post-clean:执行清理后需要完成的工作。

Default Lifecycle(默认生命周期)

这是Maven的主要生命周期,用于项目的构建。它包含以下阶段(按执行顺序):

  • validate:验证项目是否正确,以及所有必要的信息是否可用。
  • initialize:初始化构建状态,例如设置属性或创建目录。
  • generate-sources:生成任何需要的源代码。
  • process-sources:处理源代码,例如过滤任何值。
  • generate-resources:生成资源文件。
  • process-resources:复制并处理资源文件到目标目录。
  • compile:编译项目的源代码。
  • process-classes:后处理编译生成的文件,例如对Java类进行字节码增强。
  • generate-test-sources:生成测试源代码。
  • process-test-sources:处理测试源代码。
  • generate-test-resources:生成测试资源文件。
  • process-test-resources:复制并处理测试资源文件到测试目标目录。
  • test-compile:编译测试源代码。
  • process-test-classes:后处理测试编译生成的文件。
  • test:使用合适的单元测试框架运行测试。
  • prepare-package:在真正的打包之前,执行一些准备打包必要的操作。
  • package:将编译好的代码打包成可分发的格式,如JAR、WAR等。
  • pre-integration-test:执行集成测试之前需要完成的工作。
  • integration-test:按照设定进行集成测试。
  • post-integration-test:执行集成测试之后需要完成的工作。
  • verify:运行任何检查,验证包是否有效且达到质量标准。
  • install:将包安装到本地仓库,供其他项目使用。
  • deploy:将最终的包复制到远程的仓库,供其他开发人员和项目共享。

Site Lifecycle(站点生命周期)

这个生命周期的目的是生成和发布项目的站点文档。它包含以下阶段:

  • pre-site:执行一些需要在生成站点文档之前完成的工作。
  • site:生成项目的站点文档。
  • post-site:执行一些需要在生成站点文档之后完成的工作,如站点部署准备。
  • site-deploy:将生成的站点文档部署到特定的服务器上。这些生命周期阶段是有序的,并且后面的阶段依赖于前面的阶段。你可以通过Maven命令来调用这些阶段,例如mvn clean install将会依次执行clean、validate、compile、test、package和install等阶段。



下篇预告:《Maven学习笔记(二):Maven基础(基于IDEA)

目录
相关文章
|
1月前
|
Java Devops 持续交付
Maven学习笔记(二):Maven基础(基于IDEA)
【10月更文挑战第1天】Maven 是一款 Java 项目构建工具,主要用于管理 jar 包及其依赖关系。上一篇简单介绍了Maven的基础知识,本文主要介绍IDEA上的实际使用场景。内容上几近全为学习《尚硅谷2022版Maven教程》整理所得。仅供参考。
170 0
Maven学习笔记(二):Maven基础(基于IDEA)
|
3月前
|
前端开发 Java 编译器
【前端学java】如何从前端视角快速学习Maven
【8月更文挑战第12天】如何从前端视角快速学习Maven
54 2
【前端学java】如何从前端视角快速学习Maven
|
3月前
|
Java jenkins Shell
jenkins学习笔记之五:Maven、Ant、Gradl、Node构建工具集成
jenkins学习笔记之五:Maven、Ant、Gradl、Node构建工具集成
|
3月前
|
Java 测试技术 Maven
Maven学习笔记
这篇文章是关于Maven的学习笔记,包括Maven简介、项目构建工具比较、Maven的四大属性(依赖管理、多模块构件、一致的项目结构、一致的构件模型和插件机制)、Maven的安装和配置、IDEA集成Maven环境,以及Maven项目创建、仓库概念、多模块项目构建、打包操作和依赖概念的详细介绍。
|
3月前
|
Java jenkins 持续交付
jenkins学习笔记之十七:使用插件及maven上传制品到nexus
jenkins学习笔记之十七:使用插件及maven上传制品到nexus
|
3月前
|
Java
pandora boot热点应用探索问题之maven-compiler-plugin耗时较长的问题如何解决
pandora boot热点应用探索问题之maven-compiler-plugin耗时较长的问题如何解决
|
3月前
|
设计模式 IDE Java
|
11天前
|
Java Maven
maven项目的pom.xml文件常用标签使用介绍
第四届人文,智慧教育与服务管理国际学术会议(HWESM 2025) 2025 4th International Conference on Humanities, Wisdom Education and Service Management
64 8
|
9天前
|
Java 应用服务中间件 Maven
Maven的三种项目打包方式——pom,jar,war的区别
Maven 提供了多种打包方式,分别适用于不同类型的项目。pom 用于父项目或聚合项目,便于项目的结构和依赖管理;jar 用于Java类库或可执行的Java应用程序;war 则专用于Java Web应用程序的部署。理解这些打包方式的用途和特点,可以帮助开发者更好地配置和管理Maven项目,确保构建和部署过程的顺利进行。无论是单模块项目还是多模块项目,选择合适的打包方式对于项目的成功至关重要。
26 3
|
1月前
|
Java 关系型数据库 MySQL
Maven——创建 Spring Boot项目
Maven 是一个项目管理工具,通过配置 `pom.xml` 文件自动获取所需的 jar 包,简化了项目的构建和管理过程。其核心功能包括项目构建和依赖管理,支持创建、编译、测试、打包和发布项目。Maven 仓库分为本地仓库和远程仓库,远程仓库包括中央仓库、私服和其他公共库。此外,文档还介绍了如何创建第一个 SpringBoot 项目并实现简单的 HTTP 请求响应。
120 1
Maven——创建 Spring Boot项目