查看“Maven笔记”的源代码
←
Maven笔记
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
[[category:Maven]] == 关于Maven == === 介绍 === maven翻译为“专家”、“内行”,是Apache下的一个纯Java开发的开源项目, 它是一个'''项目管理工具''',可以使用maven对java进行'''项目构建、依赖管理'''。 === 项目构建 === * 项目构建,是一个项目从编写源代码到编译、 测试、 运行、 打包、 部署、 运行的过程; ==== 传统项目构建过程: ==== [[File:传统项目构建.jpg|400px]] # 在eclipse中创建一 个javaweb工程 # 在工程中编写源代码及配置文件等 # 对源代码进行编译,java文件编译成 class文件 # 执行Junit单元测试 # 将工程打成war包部署至tomcat运行 ==== maven项目构建过程: ==== * maven将项目构建的过程进行标准化,每个阶段使用一个命令完成。 [[File:Maven项目构建.jpg|400px]] 上图中部分阶段对应命令如下: # 清理阶段:“'''clean'''”,用于清理输出的class 文件; # 编译阶段:“'''compile'''”, 用于将java代码编译成 class文件; # 打包阶段:“'''package'''”,java工程可以打成jar包,web包可以打成war包; * 运行maven工程(web工程)需要命令:“'''tomat:run'''” 优点: # 一个命令完成构建、运行,方便快捷。 # maven对每个构建阶段进行规范,非常有利千大型团队协作开发。 === 依赖管理 === 是依赖管理:就是对项目所有依赖的 jar 包进行规范化管理。 ==== 传统项目的依赖管理 ==== 传统的项目工程要管理所依赖的jar包完全靠人工进行,程序员从网上下载jar包添加到项目工程中。这个过程中容易出现很多问题: # 没有对jar包的版本统一管理, 容易导致'''版本冲突'''。 # 从网上找jar包非常不方便, 有些jar找不到。 # jar包添加到工程中导致工程过大。 ==== Maven项目的依赖管理 ==== maven项目管理所依赖的jar包不需要 手动向工程添加jar包,只需要在“'''pom.xml'''”(maven工程的配置文件)添加jar包的坐标,自动从maven仓库中下载jar包、运行,如下图: [[File:Maven项目的依赖管理.jpg|400px]] 优点: # 通过pom.xml文件对jar包的版本进行统一管理, 可'''避免版本冲突'''。 # maven团队维护了一个非常全的maven仓库, 里边包括了当前使用的jar包, maven工程可以自动从maven仓库下载jar包, 非常方便。 === 使用Maven的优点 === # 一步构建 #: maven对项目构建的过程进行标准化, 通过一个命令即可完成构建过程。 # 依赖管理 #: maven工程不用手动导jar包, 通过在 pom.xml 中定义坐标从maven仓库自动下载,方便且不易出错。 # maven的跨平台, 可在window、linux上使用。 # maven遴循规范开发有利于提高大型团队的开发效率, 降低项目的维护成本, 大公司都会考虑使用maven来构建项目。 == 入门 == === 下载 === * 从[http://maven.apache.org/download.cgi]可下载maven最新版本。 === 安装与配置 === 解压:将maven解压到一个不含有中文和空格的目录中。 : [[File:Maven目录结构.jpg|800px]] # “bin”:“mvn.bat”(以run方式运行项目)、“mvnDebug.bat”(以debug方式运行项目); # “boot”:maven运行需要类加载器; # “conf”:“'''settings.xml'''”整个maven工具核心配置文件; # “lib”:maven运行依赖jar包; 环境变量: * 添加“%MAVEN_HOME%/bin”到path; *: [[File:Maven环境变量.png|800px]] 验证安装: * 通过“'''mvn -v'''”命令检查maven是否安装成功: *: [[File:Maven验证安装.jpg|800px]] === Maven 仓库 === maven的工作需要从仓库下载些jar包,本地项目都会通过maven软件从远程仓库下载jar包并存在本地仓库,本地仓库存在的jar包就不用每次从远程仓库下载了。 ==== 仓库类型 ==== # '''本地仓库''': 用来存储从远程仓库或中央仓库下载的插件和jar 包,项目使用一些插件或jar包,优先从本地仓库查找。 #: 默认本地仓库位置在“${user.dir}/.m2/repository”中,(“${user.dir}”表示windows用户目录)。 # '''远程仓库''': 如果本地需要插件或者jar包,本地仓库没有,默认去远程仓库下载。 #: 远程仓库可以在互联网内也可以在局域网内。 # '''中央仓库''': 在maven软件中内置一个远程仓库地址“http://repol.maven.org/maven2”,它是中央仓库,由Maven团队维护,服务于整个互联网,里面存储了非常全的jar包,包含了世界上大部分流行的开源项目构件。 ==== 配置本地仓库 ==== 在“%MAVEN_HOME%/conf/settings.xml”文件中配置本地仓库位置: <syntaxhighlight lang="xml"> <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"> <!-- localRepository | The path to the local repository maven will use to store artifacts. | | Default: ${user.home}/.m2/repository <localRepository>/path/to/local/repo</localRepository> --> <localRepository>D:\repository</localRepository> ... </settings> </syntaxhighlight> == 入门程序 == === 项目工程目录约定 === [[File:Maven项目工程目录约定.jpg|800px]] === 常用命令 === ==== compile ==== compile 是maven工程的编译命令,作用是将“src/main/java”下的文件编译为class文件输出到“target”目录下。 # 执行<nowiki>mvn compile</nowiki>: #: [[File:执行mvn compile.jpg|800px]] # 查看target目录, class文件已生成, 编译完成: #: [[File:执行mvn compile完成.jpg|800px]] ==== test ==== test 是maven工程的测试命令, 会执行src/test/java下的单元测试类。 cmd执行mvn test执行src/test/java下单元测试类: :[[File:执行mvn test.jpg|800px]] ==== clean ==== clean 是maven工程的清理命令, 执行clean会删除target目录的内容。 ==== package ==== package是maven工程的打包命令, 对于java工程执行package打成jar包, 对于web工程打成war包。 ==== install ==== install 是maven工程的安装命令,执行 install将maven打成jar包或war包'''发布到本地仓库'''。 === 生命周期 === maven对项目构建过程分为三套相互独立的生命周期,(“三套",而“相互独立”): # “Clean Lifecycle”:在进行真正的构建之前进行一些清理工作。 # “Default Lifecycle”:构建的核心部分,编译,测试,打包,部署等等。 # “Site Lifecycle”:生成项目报告,站点,发布站点; ==== 生命周期的阶段 ==== 每个生命周期都有很多阶段, 每个阶段对应一个执行命令: # clean生命周期的阶段 #: pre-clean:执行一些需要在clean之前完成的工作 #: clean:移除所有上一次构建生成的文件 #: post-clean:执行一些需要在clean之后立刻完成的工作 # default周期的内容: #: validate #: generate-sources #: process-sources #: generate-resources #: process-resources:复制并处理资源文件,至目标目录,准备打包。 #: '''compile''':编译项目的源代码。 #: process-classes #: generate-test-sources #: process-test-sources #: generate-test-resources #: process-test-resources:复制并处理资源文件, 至目标 测试目录。 #: test-compile:编译、测试源代码。 #: process-test-classes #: '''test''':使用合适的单元测试框架运行测试。 这些测试 代码不会被打包或部署。 #: prepare-package #: '''package''':接受编译好的代码, 打包成可发布的格式, 如JAR。 #: pre-integration-test #: integration-test #: post-integration-test #: verify #: '''install''':将包安装至本地仓库, 以让其它项目依赖。 #: '''deploy''':将最终的包复制到远程的仓库, 以让其它开发人员与项目共享。 # site:生命周期的阶段 #: pre-site:执行些需要在生成站点文档之前完成的工作 #: site:生成项目的站点文档 #: post-site:执行些需要在生成站点文档之后完成的工作,并且为部署做准备 #: site-deploy:将生成的站点文档部署到特定的服务器上 ==== 命令与生命周期的阶段 ==== 执行命令会将该命令 在的在生命周期当中之前的阶段自动执行,比如:执行“mvn clean”命令会自动执行pre-clean和clean两个阶段, “mvn test”命令会自动执行validate、compile、test等阶段。 * 执行某个生命周期的某个阶段不会影响其它的生命周期! * 如果要同时执行多个生命周期的阶段可在命令行输入多个命令,中间以空格隔开,例如:“mvn clean package”该命令执行clean生命周期的 clean阶段 和default生命周期的 package阶段。 === Maven 概念模型 === Maven包含了:一个项目对象模型(Project Object Model), 一组标准集合, 一个项目生命周期(Project Lifecycle), 一个依赖管理系统(Dependency Management System), 和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。 下图是maven的概念模型图: [[File:maven的概念模型图.jpg|800px]] ==== 项目对象模型(Project Object Model) ==== 一个maven工程都有一个'''pom.xml'''文件,通过pom.xml文件定义项目的坐标、项目依赖、项目信息、插件目标等。 ==== 依赖管理系统(Dependency Management System)==== 通过maven的依赖管理对项目所依赖的jar 包进行统一管理。 比如:项目依赖 Junit4.9, 通过在 pom.xml 中定义 Junit4.9 的依赖: <syntaxhighlight lang="xml"> <!--依赖关系--> <dependencies> <!--此项目运行使用junit, 所以此项目依赖junit--> <dependency> <!-- junit的项目名称--> <groupld>junit</groupld> <!-- junit的模块名称--> <artifactld>junit</artifactld> <!-- junit版本--> <version>4.9</version> <!--依赖范围:单元测试时使用junit --> <scope>test</scope> </dependency> ... <dependencies> </syntaxhighlight> ==== 一个项目生命周期(Project Lifecycle) ==== 使用maven完成项目的构建, 项目构建包括:清理、编译、测试、部署等过程,maven将这些过程规范为一个生命周期,如下所示是生命周期的各各阶段: [[File:Maven项目生命周期.jpg|800px]] * maven 通过执行一些简单命令即可实现上边生命周期的各各过程,比如执行mvn compile编译、 执行mvn clean清理。 ==== 一组标准集合 ==== maven将整个项目管理过程定义一组标准,比如:通过maven构建工程有标准的目录结构,有标准的生命周期阶段、依赖管理有标准的坐标定义等。 ==== 插件(plugin)、目标(goal) ==== maven 管理项目生命周期过程都是基于插件完成的。 == 项目构建 == === M2e 插件安装配置 === 在eclipse 集成maven软件, 最终通过eclipse创建maven工程 ==== 插件安装 ==== * 一些高版本的eclipse 已经内置了maven 的安装 在eclipse插件市场之间搜索安装即可。 ==== Eclipes 设置 M2e ==== ===== 指定maven安装目录 ===== [[File:Eclipse设置M2e.jpg|800px]] ===== User Setting 配置 ===== [[File:Eclipse设置M2e的User Setting 配置.jpg|800px]] * 如果修改了setting.xml文件需要点击上图中的"up date settings"按钮 * 对本地仓库重建索引,点击"Reindex"。 ===== eclipse浏览仓库 ===== 测试在eclipse中是否可以浏览maven的本地仓库(“Window”->“Show View”->“Other...”),如果可以正常浏览maven本地仓库则说明eclipse集成maven已经完成。 * 不能显示则尝试“Reindex”; [[File:eclipse浏览Maven仓库.jpg|800px]] === 坐标定义 === 每个maven工程都需要定义本工程的坐标(项目的“pom.xml”文件), 坐标是maven对jar 包的身份定义。如: <syntaxhighlight lang="xml"> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <!-- 项目名称,定义为组织名+项目名,类似包名--> <groupld>n.itcast.maven</groupld> <!-- junit的模块名称--> <artifactld>maven-first</artifactld> <!-- 当前项目版本号, snapshot 为快照版本即非正式版本, release 为正式发布版本--> <version>0.0.1-SNAPSHOT</version> <!--依赖范围:test 为单元测试时使用 --> <!--打包类型 jar: 执行package 会打成jar 包 war: 执行package 会打成war 包 porn : 用于maven 工程的继承, 通常父工程设置为porn --> <packaging>war</packaging> ... <dependencies> </syntaxhighlight> === 构建 Web 项目 === 【略】 === Eclipse下的命令 === 在eclipse下测试命令 clean、compile、test、package、install: [[File:Eclipse使用Maven的命令.jpg|400px]] * “Run as”采用“mvn”命令运行,“Debug as”采用“mvnDebug”命令调试方式运行(可打断点) == 依赖管理 == === 添加依赖(dependency) === 在项目的“pom.xml”中添加“dependency”标签,如: <syntaxhighlight lang="xml"> <dependencies> <!-- 添加junit4.9依赖 --> <dependency> <groupld>junit</groupld> <artifactId>junit</artifactId> <version>4.9</version> <scope>provided</scope> </dependency> </dependencies> </syntaxhighlight> === 查找坐标 === 添加依赖需要指定依赖jar包的坐标,但是很多情况我们是不知道jar包的的坐标,可以通过如下方式查询: # 相关网站或仓库中查询: #: [http://search.maven.org/ http://search.maven.org/] #: [http://mvnrepository.com/ http://mvnrepository.com/] # 使用maven插件的索引功能: #: [[File:Eclipse中maven插件的索引功能.jpg|800px]] === 依赖范围 === A依赖B, 需要在A的pom.xml文件中添加B的坐标,添加坐标时需要指定依赖范围,依赖范围包括: # '''compile''':(默认依赖范围)编译范围的依赖会用在'''编译、测试、运行''',由于运行时需要所以编译范围的依赖'''会被打包'''。 #: # '''provided''':provided依赖在'''编译和测试'''时需要,在运行时不需要(provided依赖只有在当JDK或者一个容器已提供该依赖之后才使用); #: 比如:servlet api被tomcat容器提供。 # '''runtime''':runtime依赖在'''运行和测试'''系统的时候需要,但在编译的时候不需要。 #: 比如:jdbc的驱动包 # '''test''':在编译和运行时都不需要,它们只有在'''测试编译和测试运行'''阶段可用; #: 比如:junit # '''system''':(不推荐使用)system范围依赖与provided类似,但是必须显式的提供一个对于本地系统中JAR文件的路径,需要指定systemPath磁盘路径。 * 依赖范围由强到弱的顺序是: compile > provided > runtime > test [[File:Maven 依赖范围.png|800px]] === Tomcat 插件 ===
返回至“
Maven笔记
”。
导航菜单
个人工具
登录
命名空间
页面
讨论
大陆简体
已展开
已折叠
查看
阅读
查看源代码
查看历史
更多
已展开
已折叠
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
笔记
服务器
数据库
后端
前端
工具
《To do list》
日常
阅读
电影
摄影
其他
Software
Windows
WIKIOE
所有分类
所有页面
侧边栏
站点日志
工具
链入页面
相关更改
特殊页面
页面信息