自己的一些摘录
测试: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?
- eclipse菜单 - Window - Preferences- Java - Installed JREs 将配置的JRE定位到JDK,例如JRE home:D:\Program Files (x86)\Java\jdk1.6.0_45
- 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加载的类要在该模块下或者依赖中,不在一个模块下的找不到