Maven规范化构建流程:
Maven依赖管理:
Maven官网下载
_与普通软件一样,不要有特殊符号与空格_
maven 的目录结构:
bin:存放了 maven 的命令 boot:存放了一些 maven 本身的引导程序,如类加载器等 conf:存放了 maven 的一些配置文件,如 setting.xml 文件 lib:存放了 maven 本身运行所需的一些 jar 包 至此我们的 maven 软件就可以使用了,当然了前提是你的电脑上之前已经安装并配置好了 JDK
配置MAVEN_HOME,变量值就是你的 maven安装的路径(bin目录之前一级目录)
添加到Path路径
__打开 cmd ,输入 mvn -v 若出现 maven 的版本号,即安装成功__
_默认本地仓库位置在{user.din}/.m2/repository,{user.dir}表示 windows用户目录_
若需要修改本地仓库位置,首先打开 conf 目录下的 settings.xml 文件,再找到 <u><localRepository></u> 标签(大概在56行),然后把自己所配置的本地仓库目录填上去,如本人的本地仓库:
配置完后,终于可以开始使用 maven 了!!!
进入一个 HelloWord 的 maven Web工程目录(当前目录有 pom. Xm文件),运行 <u>mvn tomcat:run</u>命令。
然后根据提示打开浏览器输入资源地址(如:localhost:8080/hello_maven/),即可出现运行结果: Hello World。
mvn compile 是 maven 工程的编译命令,作用是将sr/main/ava下的文件编译为 class 文件输出到 target 目录下。
mvn test 是 maven 工程的测试命令,会执行 src/test/java下的单元测试类
mvn clean 是 maven 工程的清理命令,执行 clean 会删除 target目录及内容
mvn package是 maven 工程的打包命令,对于 java 工程执行 package 打成 jar 包,对于 web 工程打成 war 包
mvn install 是 maven 工程的安装命令,执行 instal 将 maven 打成 jar 包或 war 包发布到本地仓库
注:当后面的命令执行时,前面的操作过程也都会自动执行,
__-> Create New Project__
_普通 Java 工程可以选择骨架: maven-archetype-quickstart_
_IDEA 第一次创建 maven 工程会下载许多依赖包,故时间会比较长_
控制台出现 BUILD SUCCESS 则说明成功
手动添加 src/main/java 目录,如下图右键 man 文件夹 → New → Directory,2019 版 IDEA 的 新建 Maven 工程,增加了自动隐藏 Make Directory → Sources Root 的步骤,会有提示 java 作为自由根目录
src/main/java 创建了一个 Servlet,但报错
解决方案,就是要将 servlet-api-xxx.jar 包放进来,作为 maven 工程应当添加 servlet 的坐标,从而导入它的 jar
<dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>3.0-alpha-1</version> </dependency>
<!-- 项目名称,定义为组织名+项目名,类似包名 -->
<groupId>com.actadd</groupId>
<!-- 模块名称 -->
<artifactId>HelloWorld_Maven</artifactId>
<!-- 当前项目版本号, snapshot为快照版本即非正式版本,release为正式发布版本 -->
<version>1.0-SNAPSHOT</version>
<!-- packaging:打包类型 -->
<!-- jar:执行 package会打成jar包
war:执行 package会打成war包
pom:用于 maven工程的继承,通常父工程设置为pom -->
<packaging>war</packaging>
添加依赖需要指定依赖 jar 包的坐标,但是很多情况我们是不知道 jar 包的的坐标,可以通过如下两个网址查询:
http://search.mavenorg/
http://mvnrepository.comA依赖B,需要在A的 pomum文件中添加B的坐标,添加坐标时需要指定依赖范围,依赖范围包
括:
<u>compile</u></u>:编译范围,指 A 在编译时依赖 B ,此范围为默认依赖范围。编译范围的依赖会用在编译、测试、运行,由于运行时需要所以编译范围的依赖会被打包。
<u>provided</u>: provided 依赖只有在当 JDk 或者一个容器己提供该依赖之后才使用, provided 依赖在编译和测试时需要,在运行时不需要,比如: servlet api 被 tomcat 容器提供。
<u>runtime</u>: runtime依赖在运行和测试系统的时候需要,但在编译的时候不需要。比如:jdbc的驱动包。由于运行时需要所以 runtime 范围的依赖会被打包
<u>test</u>:test范围依赖在编译和运行时都不需要,它们只有在测试编译和测试运行阶段可用比如:junt 由于运行时不需要所以 test 范围依赖不会被打包。
<u>system</u>: system 范围依赖与 provided类似,但是你必须显式的提供一个对于本地系统中JAR文件的路径,需要指定 systemPath 磁盘路径, system 依赖不推荐使用。
<scope> 依赖范围 </scope> 默认引入的 jar 包 -- compile【默认范围可以不写】(编译、测试、运行都有效) servlet-api、jsp-api -- provided(编译、测试有效,运行时无效防止和 tomcat 下 jar 冲突) jdbc 驱动 jar 包 -- runtime(测试、运行有效) junit --- test(测试有效) 依赖范围由强到弱的顺序是: compile > provided > runtime > test
package com.actadd.servlet; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; /** * @ClassName ServletDemo * @Description 在 maven 工程中创建一个 ServletDemo * @Author Actadd * @Date 21:18 2019/12/15 * @Version 1.0 */ public class ServletDemo extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //跳到 hello.jsp 资源 req.getRequestDispatcher("/hello.jsp").forward(req, resp); } }
pom.xml 中添加 tomcat 插件
接下来在运行按钮添加 tomcat 运行配置:
添加 tomcat
右键运行