前言
众多的java项目均由maven构建,迄今为止未系统学习过maven,这里来梳理一下。
maven 概念
maven是一款服务于java的自动化构建工具。
构建项目
- 清理
清除之前项目编译的字节码文件 - 编译
把程序源代码编译成class字节码文件
批量:maven 可同时编译多个字节码文件 - 测试
maven 可执行测试程序代码
批量:maven 可同时执行多个测试代码,测试多个功能 - 报告
生成测试结果的文件 - 打包
将项目中所有的 class 文件,配置文件等所有资源放在一个压缩文件中
java 普通程序打包为 jar 包
web 应用工程打包为 war 包 - 安装
把打包生成的文件(jar、war)安装到本机仓库指定的位置,提供依赖 - 部署
将动态web工程生成的war包复制到servlet容器的指定目录下,使其运行
maven 下载
在maven官网 https://maven.apache.org/ 下载apache-maven-3.8.4版本并解压。
并在mac上配置环境变量
export M2_HOME=/Users/cseroad/apache-maven-3.8.4
export PATH=$PATH:$M2_HOME/bin
生效并重启后验证。
source ~/.bash_profile
image.png
maven 配置
1、修改本地仓库地址。
修改conf/setting.xml文件
<localRepository>/Users/cseroad/maven/repository</localRepository>
2、修改仓库镜像
同样修改conf/setting.xml文件
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>
pom.xml 文件
pom全称是Project Object Model,即项目对象模型。pom.xml是maven的项目描述文件。
<!-- Maven模型的版本,对于Maven2和Maven3来说,它只能是4.0.0-->
<modelVersion>4.0.0</modelVersion>
<!-- 公司或者组织的唯一标志,并且配置时生成的路径也是由此生成, 如org.example -->
<groupId>org.example</groupId>
<!-- 项目的唯一ID,一个groupId下面可能多个项目,就是靠artifactId来区分的 -->
<artifactId>maven01</artifactId>
<!-- 版本号,如果项目还在开发中,是不稳定版本,通常在版本后带-SNAPSHOT -->
<version>1.0</version>
properties用来定义一些配置属性。
<properties>
<!--源码编译jdk版本-->
<maven.compiler.source>1.8</maven.compiler.source>
<!--运行代码的jdk版本-->
<maven.compiler.target>1.8</maven.compiler.target>
<!--项目构建使用的编码,避免中文乱码-->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!--生成报告的编码-->
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
dependencies 依赖第三方的类库。在https://mvnrepository.com/ 查找需要的依赖。
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
依赖范围有几种:
compile | test | provided | runtime |
---|---|---|---|
对主程序有效 | 对主程序无效 | 对主程序有效 | 对主程序有效 |
对测试程序有效 | 对测试程序有效 | 对测试程序有效 | 对测试程序有效 |
参与打包 | 不参与打包 | 不参与打包 | 参与打包 |
参与部署 | 不参与部署 | 不参与部署 | 不参与部署 |
如:commons-logging | 如:junit | 如:servlet-api | 如:log4j |
maven 命令
maven的命令对应着maven的生命周期。命令的执行必须在pom.xml所在目录。
mvn clean 清理
mvn compile 编译 main/java 下的 java 程序
mvn test-compile 编译 test/java 下的 java 程序
mvn test 测试
mvn package 打包生成jar包或者war包
mvn install 安装,把本工程打包后,保存到本地仓库中
mvn deploy 部署,会保存到私服仓库中,并自动将项目部署到web容器中
手动创建一个maven工程
maven_test
|-- pom.xml # maven的核心文件(maven项目必须有)
|-- src
|-- main # 放主程序java代码和配置文件
| -- resources # 放java程序中要使用到的配置文件
| -- java # 放程序包和包中的java文件
| -- com
| -- example
| -- TestHello.java
|
|-- test # 放测试程序代码和配置文件 (可以没有)
| -- resources # 测试程序中要使用到的配置文件
| -- java # 放测试程序包和包中的java文件
| -- com
| -- example
| -- TestHello.java
TestHello.java 为代码
package com.example;
public class TestHello{
public static void main(String[] args){
TestHello hello = new TestHello();
System.out.println("hello test");
}
}
在pom.xml目录下输入mvn compile
可正常编译。
java 命令再运行target/classes下代码
image.pngmaven 在 idea 的配置
在maven设置项里配置和本地maven相同的目录和配置文件。
image.pngmaven 创建普通Java 项目
点击新建project,选择maven-archetype-quickstart
项目创建普通项目
在运行配置里,输入命令compile
代表编译该程序
输入命令package
打包为jar包
maven 创建Java Web 项目
新建project时,选择maven-archetype-webapp
项目创建Java Web 项目。
其余和普通项目一样。
导入依赖包
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
servlet继承HttpServlet
public class TestServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("GET请求");
}
}
输入命令package
打包为war包。
移动至tomcat/webapps/下,可正常访问。
也可以在pom.xml中的build标签配置plugins标签
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<version>6.1.25</version>
<configuration>
<!-- 热部署,每10秒扫描一次 -->
<scanIntervalSeconds>10</scanIntervalSeconds>
<!-- 此处为项目的上下文路径 -->
<contextPath>/test</contextPath>
<connectors>
<connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
<!--此处配置了访问的端口号 -->
<port>9090</port>
</connector>
</connectors>
</configuration>
</plugin>
设置jetty启动。
image.png image.png访问9090端口
image.png总结
学习了maven如何创建、导入、导出项目。
参考资料
http://qibinaoe.top/2021/01/19/Maven%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/
https://www.bilibili.com/video/BV1Fz4y167p5?p=1
https://www.bilibili.com/video/BV134411T7nB?p=2&spm_id_from=pageDriver
网友评论