maven
1.maven项目目录结构:
src
-main
-java
-package
-test
-java
-package
resources
src 源代码目录
resources 存放资源文件
2.pom.xml结构
<modelVersion> 是maven的版本
<groupId> 是项目的包名
<artifactId> 是模块名
<version> 当前项目的版本号
<dependencies> 依赖哪些包
<dependency>依赖的包
<groupId>包名
<artifactId>模块名
<version>包版本
pom.xml保存在项目根目录,然后打开命令行去到项目所在根目录执行mvn compile命令,进行编译。
mvn test命令可以测试是否部署成功
mvn package打包当前项目jar
3.mvn compile 编译
mvn test 运行test包下面的代码 生成target文件夹 其中classes中为编译后的字节码文件
mvn package 给整个项目打包,在target目录下生成jar文件(文件类型可用pom中的packaging标签自己定义
4.测试类:
import org.junit.*;
@Test
5.maven 的常用的构建命令
mvn -v
用来查询maven的版本号、java的版本号以及系统的版本号
mvn compile
用来编译当前目录下的项目(将会去pom中查找依赖,若没有,会联网到中央库搜索),BUILD SUCCESS 代表成功
mvn tset
运行测试类
mvn package
在target目录下,生成当前项目的Jar包(打包)
mvn clean
清理项目,执行此命令将会删除target目录
mvn install
将当前目录下所在的项目安装到本地仓库中,可以供其他Maven项目依赖使用
(要在使用该maven项目的其他maven项目的pom.xml文件中配置引用该项目,
将该maven项目中的下面三个配置复制到其他maven项目中供其他项目当做jar引用他
<groupId> 是项目的包名 <artifactId> 是模块名 <version> 当前项目的版本号)
6.自动创建目录骨架的两种方式
1.mvn archetype:generate 根据提示分步创建
2.mvn archetype generate -DgroupId=组织名,公司网址的反写+项目名
-DartifactId=项目名-模块名
-Dversion=版本号
-Dpackage=代码所存在的包名
7.maven中的坐标和仓库
坐标:<groupId> 是项目的包名
<artifactId> 是模块名
<version> 当前项目的版本号
groupId , artifactId , version 确定地址。
仓库:本地仓库和远程仓库
镜像仓库:
1>. 更改本地仓库位置 : settings.xml中添加localRepository标签
2>. 组合命令: mvn clean compile
3>. settings.xml中配置mirror repositories,但是注意一旦配置了mirror,maven就会默认从mirror仓库取包而远程主仓库就不可使用
8.在eclipse中安装maven插件以及创建maven项目:
①在eclipse4.0及MyEclipse中就不需要安装maven插件,在window--preference中可以查看是否有maven插件,
没有的话就需要安装Maven插件,直接复制Maven插件到eclipse安装目录中的dropins中,然后修改eclipse.ini,
在这个文件里的512m后面添加-vm,换行,再添加jdk/bin/javaw.exe保存。
②eclipse是默认运行在jre之上的而maven需要jdk的支持,需要tools.jar在jdk/lib目录中,所以修
改eclipse的JRE,java---Installed JREs--ADD--Next--把本地JDK的目录放到JRE home中,并设
置Dmaven.multiModuleProjectDirectory=$M2_HOME--最后勾选JDK
③更改maven本地的配置Installactions---ADD---把本地的maven目录放进去
④修改setting的路径
会出现的问题:
1、如果版本不匹配 则mvn -v查看maven的jdk版本,然后在eclipse中配置当前使用的jdk
2、run as-->Maven build...-->在goals中compile(可以在此处使用其他的命令,如:package)---》run
若报-Dmaven.multiModuleProjectDirectory错误,则在选项-->java--》installed JRES 中设置jdk的参数,
添加上“-Dmaven.multiModuleProjectDirectory=$M2_HOME”
9.完整的项目构建过程包括:
clean、compile、test、package、validate、install
清理、编译、测试、打包、集成测试、验证、部署
注:运行package命令时,compile以及test会自动运行
maven相互独立的三个生命周期:
1.clean 清理项目
1> pre-clean 执行清理前的工作
2> clean 清理上一次构建生成的所有文件
3> post-clean 执行清理后的文件
2.default 构建项目(最核心)
compile test package install
3.site 生成项目站点(根据pom中的信息自动生成站点)
pre-site 生成站点前的工作
site 生成项目的站点文档
post-site 生成站点后的工作
site-deploy 发布生成的站点到服务器上
10.maven中pom.xml解析
pom.xml文件是maven核心管理文件,用于项目描述,组织管理,依赖管理和构建信息的管理
maven的pom.xml各标签所代表的内容:
<modelVersion> : 制定了当前pom的版本号(固定且必须)
<project> : 根标签,约束信息
<modelVersion> : 指定当前pom的版本,必须元素
<groupId> : 反写的公司网址+项目名
<artifactId> : 项目名+模块名
<version> : 0.0.0snapshot
第一个0 : 表示大版本号
第二个0 : 表示分支版本号
第三个0 : 表示小版本号
snapshop: 快照
alpha : 内部测试
beta : 公测
Release : 稳定
GA : 正式发布
<packaging> : 打包方式,默认为jar(war zip pom)
<name> : 项目描述名
<url> : 项目地址
<description> : 项目描述
<developers> :
<licenses> : 许可信息
<organization> :
<dependencies> : 依赖列表
<dependency>
<groupId> :
<artifactId> :
<version> :
<type> :
<scope> : 依赖范围
<optional> : 设置依赖是否可选(true/false)
<exclusions> : 排除依赖传递列表
<exclusion>
<dependencyManage>: 依赖的管理
<dependencies>
<dependency>
<build>
<plugins>: 插件列表
<groupId>
<artifactId>
<version>
<parent> : 用于子模块中对于父模块的继承
<modules> : 指定多个模块,然后一起编译
11.scope 作用域的值:
compile :默认,编译,测试,运行均有效;
provided: 编译,测试; 如:servlet API加载
runtime: 测试,运行,如:jdbc驱动;
import:导入的范围有效,它只使用在dependencyManagement中,表示从其他的pom中导入dependency的配置
test: 测试(junit的<scope>test</scope>标签表示junit只存在测试的classpath中)
system:与本机系统相关联,换机子以后可能会出问题,可移植性差(编译、测试时有效)
12.依赖的传递性
clean 清除 package 打包 install 安装带本地仓库 compile 编译
依赖的传递性:需要将父类pom install到本地仓库中,子类pom在<dependency>中加入父类依赖坐标,即可调用
在<dependency>中运用<exclusions> <exclusion>来排除所不需要的父类pom
13.依赖冲突时的优先顺序:
1>.短路优先
有以下两条依赖:A->B->C->X(JAR)和A->D->X(JAR),那么A-D-X这条优先解析
2>.先声明先优先
如果路径长度相同,则谁先声明(在pom中出现的先后顺序),先解析谁
14.继承和聚合
继承:多次使用到的依赖,比如:单元测试,没有必要在所有的项目中都引用一下,此时就可以采用继承的方式来实现,先来一个父级的POM.XML然后再继承此POM.XML。
1). packaging 改为pom。
2). dependencyManagement 中并不提取依赖,只进行统一管理。
3). property中定义了junit版本号,之后可以引用。
4). 父类parent中的main和test没有意义,可以删除。
父类pom:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
子类pom:
<parent>
<groupId>com.hongxin</groupId>
<artifactId>hongxin-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
</dependencies>
聚合:如果项目D依赖项目C,项目C依赖项目B,项目B依赖项目A,我们需要一个个安装这项项目,在Maven中有一种方式可以将多个项目一次性安装,这就是聚合的概念。简单讲就是,需要人工多次操作的,只要Maven能理解,一次性告诉他,他就能帮我们做这件单调烦人的事情了。——使用<modules></modules>这个标签。
<modules>
<module>../hongxin-bege</module>
<module>../hongxin-nange</module>
<module>../hongxin-shanji</module>
</modules>
maven学习笔记
最新推荐文章于 2023-12-08 22:35:37 发布