个人理解为一种能够对编译,运行单元测试,生成文档,打包和部署等操作形成完全自动化,对于工程所依赖的jar,war包能够通过配置文件通过网络下载。因此也相当于一个远程三方共享库。
Maven的安装配置和目录结构IDEA中自带Maven,也可以去官网下载安装包直接解压。这里使用不用自带的使用自己下载的3.8 版本的Maven
Maven目录结构| 目录 | 目的 |
|---|---|
| ${basedir} | 存放pom.xml和所有的子目录 |
| ${basedir}/src/main/java | 项目的java源代码 |
| ${basedir}/src/main/resource | 项目的资源,比如说property文件 |
| ${basedir}/src/test/java | 项目的测试类,比如说Junit代码 |
| ${basedir}/src/test/resources | 测试使用的资源 |
| 命令 | 描述 |
|---|---|
| mvn –version | 显示版本信息 |
| mvn clean | 清理项⽬⽣产的临时⽂件,⼀般是模块下的target⽬录 |
| mvn compile | 编译源代码,⼀般编译模块下的src/main/java⽬录 |
| mvn package | 项⽬打包⼯具,会在模块下的target⽬录⽣成jar或war等⽂件 |
| mvn test | 测试命令,或执⾏src/test/java/下junit的测试⽤例. |
| mvn install | 将打包的jar/war⽂件复制到你的本地仓库中,供其他模块使⽤ |
| mvn deploy | 将打包的⽂件发布到远程参考,提供其他⼈员进⾏下载依赖 |
| mvn site | ⽣成项⽬相关信息的⽹站 |
| mvn eclipse:eclipse | 将项⽬转化为Eclipse项⽬ |
| mvn dependency:tree | 打印出项⽬的整个依赖树 |
| mvn archetype:generate | 创建Maven的普通java项⽬ |
| mvn tomcat7:run | 在tomcat容器中运⾏web应⽤ |
| mvn jetty:run | 调⽤ Jetty 插件的 Run ⽬标在 Jetty Servlet 容器中启动 web 应⽤ |
- -D 传⼊属性参数
mvn package -Dmaven.test.skip=true 以 -D 开头,将 maven.test.skip 的值设为 true ,就是告诉maven打包的时候跳过单元测试。同 理, mvn deploy-Dmaven.test.skip=true 代表部署项⽬并跳过单元测试。
- -P 使⽤指定的Profile配置。演示见打包部分
通过maven可以实现按不同环境进⾏打包部署,例如: mvn package -Pdev -Dmaven.test.skip=true 表示打包本地环境,并跳过单元测试IEDA上Maven工程的创建 IDEA全局Maven配置
File-> New Projects Setup -> Set for New Projects -> Build,Execution,Deployment->Build Tools->Maven
选择自己的Maven路径,以及settings.xml路径
- 修改默认仓库路径和镜像源
默认仓库是存放下载的第三方jar包的,镜像源是下载三方jar包的地址,国情因素改为阿里镜像源。
1.1.修改默认仓库位置 打开maven⽬录 -> conf -> settings.xml 添加仓库位置配置使用Maven创建项目D:/Maven/.m2/repository 注:仓库位置改为⾃⼰本机的指定⽬录,"/"不要写反 1.2.更换阿⾥镜像,加快依赖下载nexus-aliyun central Nexus aliyun http://maven.aliyun.com/nexus/content/groups/public
如果IDEA 2021版本出现maven项目archetype只有两个模板,需要安装插件Maven Archetypes插件
- 选择 “File” —> “New” —> “Project”。选择"Maven",设置JDK版本,选择maven项⽬的模板
- 设置项⽬的 GroupId 和 ArtifactId和项目名
- Finish即可
第一次创建工程会自动到镜像源下载一些jar包,安心等待即可,创建完是这样子的
需要修改的是你jdk版本与junit版本,并删除无用的plugins配置
编译项目只需要在3处填入maven 编译命令compile
- 编译成功
创建方式和普通工程一样,模板选择maven-archetype-webapp
部署web插件注意对应的jdk版本不同,所需要的web插件的版本也不一样。
我这里用的jdk11
在 build 标签中plugins 标签添加plugin
org.eclipse.jetty jetty-maven-plugin 11.0.6 /test 10
- 部署运行jetty命令指定9090端口
org.apache.tomcat.maven tomcat7-maven-plugin 2.1 8081 /test UTF-8 tomcat7
使⽤maven 提供的多模块构建的特性完成maven 环境下多个模块的项⽬的管理与构建这⾥以四个模块为例来搭建项⽬,以达到通俗易懂的初衷
- 模块 maven_parent —– 基模块,就是常说的parent (pom)
- 模块 maven_dao —– 数据库的访问层,例如jdbc操作(jar)
- 模块 maven_service —– 项⽬的业务逻辑层 (jar)
- 模块 maven_controller —– ⽤来接收请求,响应数据 (war)
选择 File —> Settings —> Project
不选择模板直接next
- 选择项⽬maven_parent,右键选择 New ,选择Module
- 选择Maven项⽬的模板(普通 Java 项⽬)
与maven_dao一致
建 maven_controller 模块与maven_dao和maven_service一致,只需要选择web模板即可
整个目录结构
之后需要需改每个模块的pom.xml文件
- 在dao模块中创建一个类中静态方法
package org.lujw.example;
public class UserDao {
public static void testDao() {
System.out.println("UserDao Test...");
}
}
service
- 添加maven_dao的依赖
org.lujw.example
maven_dao
1.0-SNAPSHOT
- service模块也创建一个类中的静态方法并调用dao
public class UserService {
public static void testService() {
System.out.println("UserService Test...");
// 调⽤UserDao的⽅法
UserDao.testDao();
}
}
需要在service中设置
controller- 添加 maven_service 模块的依赖
org.lujw.example maven_service 1.0-SNAPSHOT
- 涉及到servlet-api,需要对其进行添加依赖
javax.servlet javax.servlet-api 3.0.1 provided
- 创建一个类继承HttpServlet 类,并重写 service⽅法
package org.lujw.example;
import org.lujw.example.UserService;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/user")
public class UserServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse
resp) throws ServletException, IOException {
System.out.println("UserServlet Test...");
// 调⽤UserService层的⽅法
UserService.testService();
}
}
运行
- 如之前的那个web工程一样运行tmcat
- 此时可能因为找不到对应依赖,需要将整个工程全部用install 进行安装,先父类工程,然后安装子模块
- 通过网页访问,终端中有信息打印。
对于一个jar包,可能需要根据所使用的环境来进行打包,这个可以根据pom.xml来进行打包。还是以一个webapp举例
- 建立如下一个目录结构的项目
resource目录下面存放三个文件夹,分别代表本地,生成,测试的配置文件。可以通过pom.xml配置选择性的打包
dev dev true test test product product
- 设置资源⽂件配置
src/main/java ***.properties **/*.tld false
- 打包命令
- 在target下生成的war包中包含对应的配置文件
- 打包默认环境(开发环境)并且跳过maven 测试操作
clean compile package -Dmaven.test.skip=true - 打包测试环境并且跳过maven 测试操作
clean compile package -Ptest -Dmaven.test.skip=true - 打包⽣产环境并且跳过maven 测试操作
clean compile package -Pproduct -Dmaven.test.skip=true



