【开发哲学共勉】
pom 文件作为 Maven 项目的核心,以简洁的标签和精准的配置,掌控着依赖的全局,如同船长依据航海图引领巨轮在复杂的海洋中航行,确保项目在正确的航道上前行。
🎉 前言
在 Java 生态中,Maven 是工程化开发的核心基石。它以标准化流程解决依赖管理与构建繁琐问题,让项目从代码到交付的链路清晰可控
本文聚焦 Maven 工程开发核心环节:从 Maven 插件配置、工程构建步骤,到 pom 文件关键配置逻辑,再到代码编写要点与依赖范围规则。掌握这套体系,不仅能驾驭工具,更能建立工程化思维,在团队协作与项目迭代中实现高效开发个人主页:艺杯羹
系列专栏:Maven
1. 🧩Maven插件
Maven 插件用于扩展 Maven 核心能力
setting --> 输入 maven --> 修改安装路径,配置文件路径,修改本地仓库路径
其中的第二个“配置文件路径”,要配置到Settings.xml
这就配置好Maven插件了
但是这个配置好了后,只能在当前项目中有用,在新的项目中又要重新配置了
新建新项目时,就会自动配置好maven插件的方法
file ---> New Projects Setup ---> Settings for New Projects...
再按照刚刚那个方法配置一遍
之后再创建项目时,就会沿用这个Maven配置(๑•̀ㅂ•́)و✧
maven工程,就是可以使用Maven来管理的工程
2. 🏗️构建Maven工程
接下来我们构建一个Maven的Web工程:
- 打开 idea,选择创建一个新工程
- 选择Maven工程,并使用maven的web工程模板
项目组:公司名 - 手动添加src/main/java目录,此时该目录还不能写Java代码
可以看到这个目录和之前讲的目录还有一些没有创建出来,那么我们就要手动创建了
要给每个文件夹功能 - 添加文件
如果main下的java文件夹里不能用写java文件
那么就右击文件夹,在最下方选择“Sources Root”,就可以写java文件了
test中的文件夹一般是会自动配置为测试文件夹
Sources Root |
源码根,存放 |
Test Sources Root |
测试源码根,存放 JUnit 测试类(如 |
Resources Root |
资源根,存放配置( |
Test Resources Root |
测试资源根,存放测试配置文件(如 |
Excluded |
排除目录,忽略构建输出(如 |
3. 📄 pom文件配置
pom文件,简单来说他的作用:
pom.xml 是 Maven 项目的 “说明书”,用来写清楚项目要啥依赖、怎么打包,让大家按统一规矩干活,避免版本混乱和重复操作
pom文件最上方是项目基本信息:
解释标签含义
参数 |
定义内容 |
规则 / 说明 |
示例 |
groupId |
项目组名 |
反向域名格式 |
com.yibeigen |
artifactId |
项目名 |
小写字母 |
my-project |
version |
版本号 |
三段式:重大升级。新功能.bug 修复 |
1.2.3 |
packaging |
打包方式 |
如 jar、war 等 |
jar |
3.1. ⚙️ 中定义一些配置信息
没有的话,就添加进去即可,这里的第二个是java版本,根据自己的java版本来改,我这里是1.8版本的就写1.8, 如果你是jdk11,那就把1.8改成 11 就OK了
<properties> <!-- 编码格式 --> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <!-- 编译时使用的JAVA版本 --> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties>
3.2. 📦中定义依赖的jar包坐标
因为javaweb项目,所以要用到servlet 和 jsp的jar包,因此就要这两个的坐标
由于项目是web项目,需要写Servlet和JSP,所以需要引入Servlet和JSP的依赖。查找依赖坐标的网站:https://mvnrepository.com/
- 搜索Servlet ---> 单击Java Servlet API
2. 里面的版本可以自己选,我选的是3.0.1的
单击进去复制如图的代码即可
往下划一下
- 复制到pom文件的 dependencies 标签中,这里先删除最后一个
jsp也是一样的操作,也可以直接复制我写的这个代码,因为都是写死的代码(๑•̀ㅂ•́)و✧
放到pom文件中后,还要让 maven 来做加载
一般在右侧可以打开maven
<!-- 依赖的jar包坐标 --> <dependencies> <!-- servlet依赖 --> <dependency> <!-- 项目组名 --> <groupId>javax.servlet</groupId> <!-- 项目名 --> <artifactId>javax.servlet-api</artifactId> <version>3.0.1</version> </dependency> <!-- jsp依赖 --> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.2</version> <scope>provided</scope> </dependency> </dependencies>
为什么之前的web项目中没有引入jsp和servlet的jar包?
因为之前项目中使用的是tomcat中的jsp和servlet中的jar包,在项目中没有引入
我们会用Tomcat插件,而不是完整的Tomcat
3.3. 🔌中定义第三方插件
放在 下 web项目依赖tomcat运行,所以添加 tomcat7插件 ---> 在 maven 中刷新,就会自动下载Tomcat插件了
<plugins> <!-- tomcat插件 --> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.1</version> <configuration> <port>8080</port> <path>/</path> <uriEncoding>UTF-8</uriEncoding> <server>tomcat7</server> </configuration> </plugin> </plugins>
4. ✍️编写代码
接下来编写Servlet和Jsp代码,来通过idea来运行一下
servlet代码 @WebServlet("/demo1") public class MyServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 跳转页面 req.getRequestDispatcher("hello.jsp").forward(req,resp); } } jsp代码 <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <h1>大家好,感谢支持艺杯羹!</h1> </body> </html>
这样就运行成功了
但是这要每次都输入命令,现在提供一个直接可以运行的配置
单击右上角的当前文件 ---> Edit Configurations……
单击左上角的加号 ---> Maven
填写项目名和执行的命令:tomcat7:run
点击OK后配置完成,点击Idea的运行符号即可使用maven中的tomcat7插件运行项目
5. 🔗依赖范围
上面的运行后,在浏览器访问servlet时,发现报500异常,这是为什么呢?
这是由于项目中引入了 Servlet 和 Jsp 的jar包
而在项目运行时,Tomcat要使用它自带的Servlet和Jsp的jar包,这样就造成了jar包冲突
但如果项目不引入 Servlet 和 Jsp 的 jar 包,则根本无法通过编译。
此时可以设置依赖的作用范围解决该问题,设置Servlet和Jsp的jar包只在编译期起作用,运行时不起作用,这样不仅可以通过编译,还能在运行时避免jar包冲突。
通过在中添加,可以设置依赖的作用范围,有以下取值:
依赖范围 |
生效阶段 |
特点 / 典型例子 |
compile |
编译、运行、打包 |
默认范围,项目打包会包含,如常规业务代码依赖 |
provided |
编译 |
运行时容器等已提供,无需打包,如 servlet - api |
runtime |
运行 |
编译不用,运行需要,如 JDBC 驱动包 |
test |
编译和运行测试代码 |
正常运行无需,如 JUnit |
system |
编译、运行(需手动处理) |
依赖无 Maven 坐标,本地硬盘引入,不推荐 |
所以对于Servlet和Jsp依赖,我们在pom.xml中添加依赖范围为provided即可,因为只需要在编译时生效就可以了
注意是放在标签里的
<dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.2</version> <!-- 作用范围 --> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.0.1</version> <!-- 作用范围 --> <scope>provided</scope> </dependency>
配置完后就可以访问了
6. 📝总结
希望本文能够帮助到你(๑•̀ㅂ•́)و✧