原文:https://nuyoah-xlh.github.io/2021/08/23/%E5%88%9D%E6%8E%A2Maven/
Maven是一款基于Java的自动化构建工具。
我们可以将未编译的Web工程比喻为一只生的鸡,编译好的Web工程是一只煮熟的鸡,编译部署的过程就是将鸡炖熟。
动态Web工程 -> 编译 -> 部署 -> 结果
构建就是以我们编写的 Java 代码 、框架配置文件、 国际化等其他资源文件、 JSP 页面和图片等静态资源作为原材料去生产出一个可运行的项目的过程。
①清理 :删除以前的编译结果,为重新编译做好准备。
②编译 :将 Java 源程序编译为字节码文件。
③测试 :针对项目中的关键点进行测试,确保项目在迭代开发过程中关键点的正确性。
④报告 :在每一次测试后以标准的格式记录和展示测试结果。
⑤打包 :将一个包含诸多文件的工程封装为一个压缩文件用于安装或部署。 Java 工程对应 jar 包, Web工程对应 war 包。
⑥安装 :在 Mav en 环境下特指将打包的结果 jar 包或 war 包安装到本地仓库中。
⑦部署 :将打包的结果部署到远程仓库或将 war 包部署到服务器上运行。
mvn -v
确定即可查看版本信息。每一个maven项目在磁盘中都是一个文件夹(项目-Hello)
Hello/
---/src
------/main #放你主程序java代码和配置文件
----------/java #你的程序包和包中的java文件
----------/resources #你的java程序中要使用的配置文件
------/test #放测试程序代码和文件的(可以没有)
----------/java #测试程序包和包中的java文件
----------/resources #测试java程序中要使用的配置文件
---/pom.xml #maven的核心文件(maven项目必须有)
mvn compile 编译src/main目录下的所有java文件的
第一次执行会下载插件
执行mvn compile, 结果是在项目的根目录下生成target目录(结果目录),maven编译的java程序,最后的class文件都放在target目录中。
设置本机存放资源的目录位置(设置本机仓库):
修改maven的配置文件, maven安装目录/conf/settings.xml,先备份 settings.xml
指定你的目录(不要使用中文目录)仓库是什么: 仓库是存放东西的, 存放maven使用的jar 和 我们项目使用的jar
仓库的分类
仓库的使用,maven仓库的使用不需要人为参与。
坐标:唯一值, 在互联网中唯一标识一个项目
<groupId>公司域名的倒写groupId>
<artifactId>自定义项目名称artifactId>
<version>自定版本号version>
https://mvnrepository.com/ 搜索使用的中央仓库, 使用groupId 或者 artifactId作为搜索条件
packaging: 打包后压缩文件的扩展名,默认是jar ,web应用是war
packaging 可以不写, 默认是jar
依赖
dependencies 和dependency ,相当于是 java代码中import
你的项目中要使用的各种资源说明, 比我的项目要使用mysql驱动
<dependencies>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>5.1.9version>
dependency>
dependencies>
properties:设置属性
build : maven在进行项目的构建时, 配置信息,例如指定编译java代码使用的jdk的版本等
加入依赖,在pom.xml加入单元测试依赖
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.11version>
<scope>testscope>
dependency>
在maven项目中的src/test/java目录下,创建测试程序
推荐的创建类和方法的提示:
测试类的名称 是Test + 你要测试的类名
测试的方法名称 是:Test + 方法名称
例子:
@Test
public void testAdd(){
测试HelloMaven的add方法是否正确
}
其中testAdd叫做测试方法,它的定义规则
mvn compile
idea中内置了maven ,一般不使用内置的, 因为用内置修改maven的设置不方便。使用自己安装的maven, 需要覆盖idea中的默认的设置。让idea指定maven安装位置等信息。
配置当前工程的设置file --> settings —> Build, Excution,Deployment --> Build Tools --> Maven
配置以后新建工程的设置, file–other settings–Settings for New Project
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.0modelVersion>
<groupId>cn.xlhgroupId>
<artifactId>m_01artifactId>
<version>1.0version>
<name>m_01name>
<url>http://www.example.comurl>
<properties>
<project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
<maven.compiler.source>1.8maven.compiler.source>
<maven.compiler.target>1.8maven.compiler.target>
properties>
<dependencies>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.11version>
<scope>testscope>
dependency>
dependencies>
<build>
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-clean-pluginartifactId>
<version>3.1.0version>
plugin>
<plugin>
<artifactId>maven-resources-pluginartifactId>
<version>3.0.2version>
plugin>
<plugin>
<artifactId>maven-compiler-pluginartifactId>
<version>3.8.0version>
plugin>
<plugin>
<artifactId>maven-surefire-pluginartifactId>
<version>2.22.1version>
plugin>
<plugin>
<artifactId>maven-jar-pluginartifactId>
<version>3.0.2version>
plugin>
<plugin>
<artifactId>maven-install-pluginartifactId>
<version>2.5.2version>
plugin>
<plugin>
<artifactId>maven-deploy-pluginartifactId>
<version>2.8.2version>
plugin>
<plugin>
<artifactId>maven-site-pluginartifactId>
<version>3.7.1version>
plugin>
<plugin>
<artifactId>maven-project-info-reports-pluginartifactId>
<version>3.0.0version>
plugin>
plugins>
pluginManagement>
build>
project>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<mirrors>
<mirror>
<id>alimavenid>
<name>aliyun mavenname>
<url>http://maven.aliyun.com/nexus/content/groups/public/url>
<mirrorOf>centralmirrorOf>
mirror>
<mirror>
<id>ukid>
<mirrorOf>centralmirrorOf>
<name>Human Readable Name for this Mirror.name>
<url>http://uk.maven.org/maven2/url>
mirror>
<mirror>
<id>CNid>
<name>OSChina Centralname>
<url>http://maven.oschina.net/content/groups/public/url>
<mirrorOf>centralmirrorOf>
mirror>
<mirror>
<id>nexusid>
<name>internal nexus repositoryname>
<url>http://repo.maven.apache.org/maven2url>
<mirrorOf>centralmirrorOf>
mirror>
mirrors>
settings>
main/java/cn/xlh/App.java
中写入一个加法函数package cn.xlh;
/**
* Hello world!
*/
public class App {
public int add(int a, int b) {
return a + b;
}
public static void main(String[] args) {
App app = new App();
int ans = app.add(10, 20);
System.out.println("Hello World!" + ans);
}
}
test/java/cn/xlh/AppTest.java
写入测试代码package cn.xlh;
import static org.junit.Assert.assertTrue;
import org.junit.Assert;
import org.junit.Test;
/**
* Unit test for simple App.
*/
public class AppTest
{
/**
* Rigorous Test :-)
*/
@Test
public void shouldAnswerWithTrue()
{
assertTrue( true );
}
@Test
public void testAdd(){
System.out.println("=======测试Add方法start======");
App app=new App();
int res=app.add(10,20);
// 如果不相等,则抛出异常
Assert.assertEquals(30,res);
System.out.println("=======测试Add方法end======");
}
}
=======测试Add方法start======
=======测试Add方法end======
Process finished with exit code 0
在右侧工具中,对项目进行快捷操作,如编译、测试等。
<dependencies>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.11version>
<scope>testscope>
dependency>
<dependency>
<groupId>javax.servletgroupId>
<artifactId>javax.servlet-apiartifactId>
<version>3.1.0version>
<scope>providedscope>
dependency>
<dependency>
<groupId>javax.servlet.jspgroupId>
<artifactId>jsp-apiartifactId>
<version>2.1version>
<scope>providedscope>
dependency>
dependencies>
src/main/java/cn/xlh
下创建Servlet
(New->键盘输入servlet)package cn.xlh;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
public class Servlet01 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter pw=response.getWriter();
pw.println("Servlet01");
pw.flush();
pw.close();
}
}
DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Applicationdisplay-name>
<servlet>
<servlet-name>Servlet01servlet-name>
<servlet-class>cn.xlh.Servlet01servlet-class>
servlet>
<servlet-mapping>
<servlet-name>Servlet01servlet-name>
<url-pattern>/Servlet01url-pattern>
servlet-mapping>
web-app>
<dependency>
<groupId>javax.servletgroupId>
<artifactId>javax.servlet-apiartifactId>
<version>3.1.0version>
<scope>providedscope>
dependency>
scope的值有 compile, test, provided ,默认是compile
src/main/java和 src/test/java 这两个目录中的所有 *.java文件会分别在 comile和 test comiple阶段被编译,编
译结果分别放到了 target/classes和 targe/test classes目录中,但是这两个目录中的其他文件都会被忽略掉,如果需
要把 src目录下的文件包放到 target/classes目录,作为输出的 jar一部分。需要指定资源文件位置。 以下内容放到
标签中。
<build>
<resources>
<resource>
<directory>src/main/java 所在的目录 ---->
< 包括目录下的 .properties,.xml 文件都会扫描到 ---->
<include>**/*.propertiesinclude>
<include>**/*.xmlinclude>
includes>
<filtering>falsefiltering>
resource>
resources>
build>
在插件中引入下载的maven而避免使用自带的maven
修改setting.xml位置
创建maven的java工程
创建web工程
properties
,找到project facts
,如果没有,网上搜索下载包可添加官网:https://mvnrepository.com/