Maven基于项目对象模型(POM),集项目构建,编译,测试,打包,安装一站式服务。是目前主流的项目开发的管理利器,今天来详细学习下。
一、Maven下载与环境搭建
Maven下载:http://maven.apache.org/download
下载压缩包,解压缩到D盘要目录即可
配置环境变量:
M2_HOME:D:\apache-maven-3.1.1\
Path添加:;%M2_HOME%\bin;
检测maven是否安装成功,打开cmd:mvn -v
如果能看到maven版本信息及jdk信息,就表示安装成功了。
二、Maven约定的目录骨架结构
src
-main
-java
-package
-test
-java
-package
-resources
三、常用的构建命令
mvn -v 查看版本信息
compile 编译 编译成功后,会生成target目录
test 测试 测试成功后,也会在target目录生成测试报告
package 打包 打包成功后,也会在target目录生成jar包
clean 清理target
install 安装jar包到本地仓库
以上构建命令需要运行在jdk上,jre上会报找不到tools.jar
四、自动创建目录骨架
在没有集成到eclipse中时,可以使用命令创建项目目录:
1.archetype:generate 按照提示一步一步创建即可
2.archetype:generate -DgroupId=组织名(一般为公司网址反写+项目名)
-DartifactId=项目名-模块名
-Dversion=版本号(SNAPSHOT为快照版,release为发布版本)
-Dpackage=代码所在的包名
五、坐标和仓库
坐标:每一个maven项目都由坐标来唯一定位,它有三个元素:
groupId
artifaceId
version
通过这三个元素就能准确找到一个maven项目
仓库:由maven管理的项目的所有jar包都在仓库中
仓库分为:
本地仓库
远程仓库(也叫中央仓库)
镜像仓库
我们使用的jar包会首先到本地仓库中去找,找不到会到远程仓库中下载到本地仓库。
1.本地仓库
一般我们安装完maven后,会在C盘的用户路径下:C:\Users\Yuwl\.m2有这个m2的文件夹,它就是我们的本地仓库,它下面有一个存放所有jar包的文件夹repository,还有一个settings.xml配置文件,它可以配置我们本地仓库的路径:
<localRepository>D:/.m2/repository</localRepository>
如,我的存放在D盘,因为C盘重装系统就没了
2.远程仓库
也叫中央仓库,它是maven的仓库,如果所用的jar包在本地仓库找不到,则去去远程仓库中下载,到本地仓库中再使用。
在maven的安装目录我的是D:\apache-maven-3.1.1\lib,下一个jar包:maven-model-builder-3.1.1.jar,以解压缩方式打开能看到有一个pom-4.0.0.xml文件,它里面有中央仓库的url:
<repositories> <repository> <id>central</id> <name>Central Repository</name> <url>http://repo.maven.apache.org/maven2</url> <layout>default</layout> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories>
http://repo.maven.apache.org/maven2这就是maven的中央仓库
snapshots为false表示下载的为非快照版本,快照版一般为开发版本
3.镜像仓库
所谓镜像,提供其实为中央仓库一样的功能,只不过有时中央仓库访问不了,因为毕竟是国外的,而镜像仓库则是由国内很多厂商提供的,我们使用也很方便,具体用法如下:
修改m2下的settings.xml文件:
在mirrors节点下加入如下配置
<mirror> <id>maven.net.cn</id> <mirrorOf>central</mirrorOf> <name>central mirror in china</name> <url>http://maven.oschina.net/content/groups/public/</url> </mirror>
mirrorOf表示要替换的中央仓库,用了这个配置,那么镜像仓库就会代替我们的中央仓库了。
六、在eclipse中安装maven插件,创建maven项目
一般现在较高版本的eclipse中都集成了maven插件,不需要单独安装了,没有的话,安装也很简单,这里就不多说了。
使用maven创建java项目:
new->maven project->选择maven-artifact-qickstart->输入groupId,artifactId,package
使用maven创建web项目:
new->maven project->选择maven-artifact-webapp->输入groupId,artifactId,package
我们可以看到maven为我们生成的项目目录结构开始讲的:
src
-main
-java
-package
-test
-java
-package
-resources
webapp项目如果没有生成这样的目录,可自行手动创建
还能看到项目根目录下的pom.xml,这就是maven用来构建项目的配置文件
七、pom.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"> <modelVersion>4.0.0</modelVersion> <groupId>com.yuwl.maven</groupId> <artifactId>maven-demo01</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>maven-demo01</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> </project>
<project></project>项目开始结束标签
<modelVersion>maven的版本,固定值为4.0.0
<groupId>组织名:一般为公司网址反写+项目名
<artifaceId>模块名:项目名+模块名
<verison>版本:0.0.1-SNAPSHOT为快照版
<packing>打包方式,有jar,war,pom等,默认为jar
<name><url>作用不大
<properties>为配置信息
如下junit的version3.8.1可以配置为:
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <junit.verison>3.8.1</junit.version> </properties>
使用就可以写成这样:
<version>${junit.verison}</version>
这样做,所有jar包的版本号可以统一管理,改起来也方便
<dependencies>为项目依赖,即引用的外部jar包
八、Maven的生命周期和插件
生命周期一般包含:清理,编译,测试,打包,安装
即clean compile test package install
我们使用时可以clean到任何一个阶段,如
clean compile 包含test
clean package 包含test,compile
clean install 包含test,compile,package
Maven插件:
在pom.xml中由<buid><plugins>标签管理
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> <version>2.4</version> <executions> <execution> <phase>package</phase><!-- 运行的阶段 --> <goals> <goal>jar-no-fork</goal><!-- 目标 --> </goals> </execution> </executions> </plugin> </plugins> </build>
如上是一个生成源码打包的插件,Maven提供了很多丰富的插件,他的很多功能其实都是由插件来实现的。
maven自身的插件:http://maven.apache.org/plugins/index.html
还有很多第三方的插件,如jetty,tomcat等
九、依赖传递
即 B依赖A C依赖B,那么C依赖A
如果不想C依赖A,就依赖B,也可以做到,如下:
<dependency> <groupId>com.yuwl.maven</groupId> <artifactId>maven-demo02</artifactId> <version>0.0.1-SNAPSHOT</version> <exclusions> <exclusion> <groupId>com.yuwl.maven</groupId> <artifactId>maven-demo01</artifactId><!-- 排除传递过来的maven-demo01 --> </exclusion> </exclusions> </dependency>
本pom为demo03,依赖demo02,demo02依赖demo01
添加<exclusions>即可排除demo01的依赖
十、依赖冲突
两个原则:
1.短路优先
A->B->C->X.jar
A->D->X.jar(优先使用)
2.先声明,先使用,按先后顺序来
十一、聚合和继承
1.聚合使用<modules>一次性编译,测试,打包,安装
<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"> <modelVersion>4.0.0</modelVersion> <groupId>com.yuwl.maven</groupId> <artifactId>maven-aggreation</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> <name>maven-aggreation</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <!-- 聚合统一编译,测试,打包,安装 --> <modules> <module>../maven-demo01</module> <module>../maven-demo02</module> <module>../maven-demo03</module> </modules> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> </project>
注意使用聚合时,当前pom的packing必须为pom。
2.继承,类似java的继承,有父子关系
先建一个parent的pom
<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"> <modelVersion>4.0.0</modelVersion> <groupId>com.yuwl.maven</groupId> <artifactId>maven-parent</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> <name>maven-parent</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <junit.version>3.8.1</junit.version> </properties> <!-- 本项目中不会起作用 --> <dependencyManagement> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> <scope>test</scope> </dependency> </dependencies> </dependencyManagement> </project>
在这个maven-parent中定义了junit依赖,但本项目不会用到这个依赖,在继承的子项目中会用到
<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"> <modelVersion>4.0.0</modelVersion> <artifactId>maven-demo01</artifactId> <packaging>jar</packaging> <name>maven-demo01</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <parent> <groupId>com.yuwl.maven</groupId> <artifactId>maven-parent</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency> </dependencies> </project>
使用<parent>maven-demo01继承自maven-parent,可以继承到junit依赖,因此共同的jar包,我们可以放到parent pom中进行管理。
十二、Maven创建web项目,并通过插件发布到jeety,tomcat中
新建maven web项目maven-webdemo,pom.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/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.yuwl.maven</groupId> <artifactId>maven-webdemo</artifactId> <packaging>war</packaging> <version>0.0.1-SNAPSHOT</version> <name>maven-webdemo Maven Webapp</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> <scope>test</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId><!-- 解决index.jsp报错 --> <version>3.0.1</version> <scope>provided</scope><!-- 只在编译与测试时运行 --> </dependency> </dependencies> <build> <finalName>maven-webdemo</finalName> <plugins> <plugin> <!-- <groupId>org.mortbay.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <version>8.1.16.v20140903</version> --> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> <executions> <execution> <!-- 在打包成功后使用jetty:run来运行服务 --> <phase>package</phase> <goals> <goal>run</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project>
使用jetty:run来运行,或绑定到package命令上来运行都可以。tomcat插件也可以运行。
总结
这里仅学习Maven最基本的用法,虽然很基础,但很重要,给日常开发项目带来很多便利,后续再进一步补充。
相关推荐
Maven,一个强大的Java项目管理和综合工具,是开发人员不可或缺的利器。它简化了构建过程,管理依赖关系,并通过标准化的生命周期帮助团队高效协作。本资源“Maven实战.rar”旨在深入探讨Maven在实际开发中的应用,...
在Java开发领域,Maven作为项目管理和构建自动化工具,是开发者不可或缺的利器。korekto-maven-grader正是为帮助开发者更好地理解和实践Maven101基础知识而设计的一款工具,它专为Maven初学者提供了全面的评分与反馈...
### Maven实战:项目管理和自动化构建的利器 #### Maven:解放手工构建的革命 Maven,作为Java社区中不可或缺的一部分,以其强大的项目管理和自动化构建能力,彻底改变了开发者们的工作方式。传统上,手工构建项目...
通过阅读《Maven实战-Linux公社www.Linuxidc.com整理.pdf》这份文档,可以深入理解Maven在实际项目中的应用和最佳实践。 总的来说,Maven是Java开发中的一把利器,它通过标准化的构建流程和强大的依赖管理功能,...
5. **Maven**:Maven是Java项目管理的利器,它通过POM(Project Object Model)文件管理项目依赖,自动化构建流程,包括编译、测试、打包、部署等。在开发过程中,Maven帮助开发者统一配置,减少因环境差异导致的...
Maven 3 是一个强大的Java项目管理和集成工具,它能够帮助开发人员管理项目的构建、报告和文档,通过使用一种标准化的项目对象模型(Project Object Model,POM)来定义项目依赖关系。在“Maven 3 实战”这个主题中...
【Maven:构建Java项目的利器】 Maven是一个强大的项目管理和构建工具...通过阅读《Maven中文指南》和《Maven实战》这两本书,开发者可以深入理解Maven的工作原理,并熟练运用到实际项目中,提升开发效率和代码质量。
#### 引言:Maven——自动化构建与项目管理的利器 《Maven权威指南》是一部详尽解读Apache Maven的书籍,由Tim O'Brien、John Casey、Brian Fox、Bruce Snyder、Jason Van Zyl和Juven Xu等多位来自Sonatype Inc.的...
** Maven教程全攻略:项目构建与管理利器 ** Maven是一个强大的Java项目管理和构建工具,它简化了构建过程,统一了构建方式,并通过依赖管理帮助开发者解决类库版本冲突问题。本教程旨在全面讲解Maven的使用,包括...
Maven,作为Java项目管理和构建的工具,是开发人员不可或缺的利器。它通过使用一个项目对象模型(Project Object Model,POM)来管理项目的配置信息,自动处理项目的构建、依赖管理和报告生成。Maven的出现极大地...
Maven,一个由Apache软件基金会开发的项目管理工具,主要功能在于项目构建、依赖管理和项目信息管理。它通过XML格式的配置文件(pom.xml)来定义项目属性和依赖关系,使得开发者能够轻松地构建、测试和部署Java项目...
Maven,作为Java项目管理和构建工具,是开发人员不可或缺的利器。它通过自动化构建过程,简化了项目的构建、依赖管理和文档生成。本资料包中的"Maven实战.pdf"提供了深入的Maven学习指南,帮助开发者更好地理解和...
总结,Maven2是Java开发中的利器,通过规范化的项目管理和自动化构建,极大地提高了开发效率。深入理解和熟练使用Maven2的各项功能,对于提升团队协作和项目管理质量至关重要。通过提供的PPT资料,学习者可以逐步...
接下来,Maven是Java项目管理的利器,它通过POM(Project Object Model)文件统一项目的构建过程,管理依赖关系。Maven可以自动化构建、测试和部署过程,使得团队协作更加高效。在这一部分,你将了解Maven的生命周期...
- **构建Spring项目**:使用 Maven 或 Gradle 进行构建管理。 - **1.9 Spring的子项目** - **Spring WebFlow**:用于构建复杂的 Web 应用流程。 - **Spring Web Services**:简化 SOAP 和 RESTful Web 服务的...
Maven,作为Java项目管理和构建工具,是Java开发人员不可或缺的利器。它通过使用一种标准化的项目对象模型(Project Object Model,POM),简化了项目的构建、依赖管理和报告过程。本“maven_training”教程旨在帮助...
1. **起步依赖(Starter)**:预配置的Maven或Gradle模块,帮助开发者快速引入所需功能,如数据访问(JDBC、MyBatis)、Web、Actuator(监控和管理工具)等。 2. **内嵌Servlet容器**:内置Tomcat或Jetty,使得应用...
5. **Maven项目管理**:Maven是Java项目管理的利器,通过统一的构建过程和依赖管理,使得项目的构建和维护更加简单。书中可能涵盖了Maven的项目结构,POM配置,以及如何利用Maven进行依赖管理和构建。 6. **测试与...
**Maven** 是一个项目管理工具,它帮助开发者管理和构建Java项目。Maven通过定义项目对象模型(POM),自动化构建过程,包括编译、测试、打包、部署等。在JFinalDemo中,Maven管理项目的依赖关系,确保所有需要的库...
1. 引入依赖:在项目中引入MyBatis Plus的Maven或Gradle依赖。 2. 配置实体类:为每个数据库表创建对应的实体类,并添加对应的注解。 3. 配置Mapper:创建Mapper接口,继承BaseMapper接口,无需编写任何XML配置文件...