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)

目录
相关文章
|
29天前
|
Java Devops 持续交付
Maven学习笔记(二):Maven基础(基于IDEA)
【10月更文挑战第1天】Maven 是一款 Java 项目构建工具,主要用于管理 jar 包及其依赖关系。上一篇简单介绍了Maven的基础知识,本文主要介绍IDEA上的实际使用场景。内容上几近全为学习《尚硅谷2022版Maven教程》整理所得。仅供参考。
138 0
Maven学习笔记(二):Maven基础(基于IDEA)
|
3月前
|
前端开发 Java 编译器
【前端学java】如何从前端视角快速学习Maven
【8月更文挑战第12天】如何从前端视角快速学习Maven
52 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
|
19天前
|
Java 关系型数据库 MySQL
Maven——创建 Spring Boot项目
Maven 是一个项目管理工具,通过配置 `pom.xml` 文件自动获取所需的 jar 包,简化了项目的构建和管理过程。其核心功能包括项目构建和依赖管理,支持创建、编译、测试、打包和发布项目。Maven 仓库分为本地仓库和远程仓库,远程仓库包括中央仓库、私服和其他公共库。此外,文档还介绍了如何创建第一个 SpringBoot 项目并实现简单的 HTTP 请求响应。
89 1
Maven——创建 Spring Boot项目
|
22天前
|
Java 关系型数据库 MySQL
如何使用 maven 创建一个 Spring Boot项目
Maven 是一个强大的项目管理工具,通过配置 `pom.xml` 文件自动获取所需的 jar 包,提高开发效率。其核心功能包括项目构建和依赖管理。项目构建支持编译、测试、打包和发布等流程,而依赖管理则通过中央仓库、本地仓库和私有服务器获取和管理项目依赖。示例中展示了如何创建第一个 SpringBoot 项目并实现简单接口。
20 1
如何使用 maven 创建一个 Spring Boot项目
|
29天前
|
Java Maven Kotlin
idea maven创建kotlin项目
本文介绍了在IntelliJ IDEA中使用Maven创建Kotlin项目的步骤,包括在`pom.xml`文件中添加Maven中央仓库、配置`kotlin-maven-plugin`插件、指定源目录、添加测试插件和执行插件,以及添加Kotlin测试依赖和标准库依赖。文中还提到了如何通过更换镜像或使用代理来解决依赖下载速度慢的问题,并展示了运行示例代码的截图。
61 4
idea maven创建kotlin项目