Maven学习

本文详细介绍了Maven的概念和使用,包括生命周期、常用命令、pom.xml元素解析、依赖管理、聚合与继承以及解决常见问题的方法。通过实例展示了如何进行项目构建、依赖排除和版本管理,帮助读者深入理解Maven的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概念
日常项目构建示例代码

有问题到这里


自己的一些摘录

测试:test、编译:compile、清理:clean、安装:install、发布:deploy、打包:package
完整过程:清理clean、编译compile、测试test、打包、集成测试、验证、部署
编译过程:编译的时候需要的依赖从pom.xml中查找坐标。再从本地仓库中找,没有则从网上的中央仓库下载到本地供使用。
镜像仓库:./conf/settings.xml(145lines mirrors)
修改本地仓库位置:同上(53lines localRepository)
修改jre 同上(182lines)
生命周期
clean 清理项目 、default 构建项目 (compile test package install)、site 生成站点后面的周期执行时,前面的周期会执行

常用命令:(都是在该项目的目录中使用,shift + 右键)
mvn –v 查看版本
compile 编译
test 测试
package 打包
clean 删除target包
install 安装jar包到本地仓库 将一些需要依赖的放入
archetype:generate 用于创建符合maven规定的目录骨架
dependency:list 查看当前项目已解析的依赖
dependency:tree 查看当前项目已解析的依赖树
pom.xml元素
project 根元素 modelVersion 当前pom的版本
groupId:项目或者组织的唯一标志,并且配置时生成路径也是由此生成,反写公司网址+项目
如org.myproject.mojo生成的相对路径为:/org/myproject/mojo
artifactId:项目的通用名称 项目名+模块名
version:项目的版本

maven中classpath有三种 编译 测试 运行

需要的资源放到src/main/resources文件中 test 同理

scope 依赖范围 < scope> test< / scope >
compile (编译范围)
provided (已提供范围)编译时需要 运行容器中也包含了,就不用添加进来。eg:servlet api
runtime (运行时范围) jdbc api jar
test (测试范围) 只在测试编译和运行阶段可用
system (系统范围)system范围依赖与provided 类似,但是你必须显式的提供一个对于本地系统中JAR 文件的路径。不推荐

dependencies dependency 传递依赖 依赖项 里面用三个确定坐标
exclusions:exclusion 排除依赖列表
依赖冲突:
1. 短路优先(依赖路径短)
2. 还同,则先声明先优先(先把那个人放在声明前)

dependencyManagement 依赖管理 供子模块使用(自身不加载
聚合:多个model 相同的操作即聚合

dependencyManagement 中的 dependencies 元素只表明依赖项版本的优先选择,并不影响项目的依赖项;而 dependencies 元素则影响项目的依赖项详解

modules 定义多个模块编译 额外建一个pom.xml容器来运行,packaging用pom
< modules>< module>< /module>< /modules>

如果一个工程是parent或者aggregation(即mutil-module的)的,那么必须在packing赋值为pom
继承:父模块中的依赖用dependencyManagement (本模块不使用)管理
子模块中用< parent>父模块坐标< /parent>子对父模块的继承。子模块的dependency中(不用规定版本号了)

optional: 标注可选,当项目自身也是依赖时。用于连续依赖时使用 true/false
build 为构建行为提供支持plugins插件列表
properties 归类依赖
相当于本文件的引用 $ { }
eg: http://blog.youkuaiyun.com/woshixuye/article/details/8163975
其中groupId,artifactId,version,packaging这四项组成了项目的唯一坐标。一般情况下,前面三项就可以组成项目的唯一坐标了。

Web-app
添加servlet(注意scope) 添加容器 run

常见问题

No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?

  1. eclipse菜单 - Window - Preferences- Java - Installed JREs 将配置的JRE定位到JDK,例如JRE home:D:\Program Files (x86)\Java\jdk1.6.0_45
  2. ALT+F5 进行 update project 。

JBoss中打不开打包的项目

JBoss的应用启动,打包的xx.war 在浏览器中的路径就是xx 。

排除错误引用
dependency:tree


扩展:
Maven 构建多模块项目
Assembly 在 maven 中属于打包

Google: maven assembly xml

maven assembly plugin使用
Maven实战(九)——打包的技巧

Maven插件:参考
1. SCM配置,使用maven-release-plugin进行版本管理版本管理
2. maven-assembly-plugin打包技巧
3. 构建profile发布,指定 package在命令下用 -P参数profile
4. 将maven打包传到远程仓库

mvn deploy:deploy-file –DgroupId=com.huacloud.jar –DartifactId=sqljdbc4 –Dversion=1.0.0 –Dpackaging=jar –Dfile=sqljdbc4.jar –DrepositoryId=snapshots –Durl=http://222.197.188.5:9000/nexus/content/repositories/snapshots
分发构件至远程仓库

5.mvn version set更新版本,eclipse 中创建maven module 子模块

坑点
1. 多个maven模块,注意编码和jdk的版本要一致。
2. maven中的classpath要设置为sourcefloder 才能在其中找
3. Spring加载的类要在该模块下或者依赖中,不在一个模块下的找不到

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值