Maven简介
JavaWeb中,遇到的一个烦恼,就是每次都要导入jar包,忘记了就会很麻烦。随着项目会变大,jar包管理变得及其麻烦,所以Maven应运而生,不过Maven并不是最早的项目管理工具。
核心思想:约定大于配置,Maven会给你配置
Maven项目的创建
- 打开IDEA
- 在新建项目页面的左边导航栏,选择Maven选项,在右边的页面中勾选上面的Create from archetype,然后再在下面的选项中选择相应的项目(作者这里选择的是JavaWeb项目,所以选择),如图所示:
- 填写项目信息,如图所示:
- 选择Maven路径及配置文件和仓库目录,如图所示:
- 配置项目名称,如图所示:
- 选择自动导包,如图所示:
- 等待下载完成
项目中需要注意的事项
- 约定大于配置
- Maven规定了,代码必须存放到指定的目录下
- JavaWeb项目目录结构
- src :资源项目路径
- main:整个程序
- java:存放项目的java源代码(dao、pojp、service、servlet、fliter…)
- resources:存放项目的资源文件(xml、properties…)
- webapp:存放网页代码及web-inf核心文件
- test:测试用
- java:测试用java代码
- resources:测试用的资源文件
- pom.xml:重要! pom.xml是Maven项目的核心配置文件,里面会配置所有和Maven有关的东西
- IDEA中使用注意事项
这些文件夹有的不会自动生成,需要手动创建,但是呢,手动创建的文件夹没有权限写java代码或者存放资源,那就需要手动进行标记。怎么配置呢?
1.点击左上角的File,选择Project Structure选项,如图所示:
2.选择左边导航栏的Modules,打开项目编辑窗口,如图所示:
3.根据图示完成操作,如图所示:
4.编辑结束后,项目完整结构如图所示:
疑问:target是什么?
回答:输出目录文件,对应我们项目中的out文件夹,如图所示:
IDEA中Maven的配置
maven设置地址
1.点击左上角的File,选择Settings选项,如图所示:
2.在弹出的窗口中。可以编辑Maven的相关信息
项目结构测试位置
1.选择右边悬浮窗中的“Maven Projects”
2.Maven仓库结构如图所示:
3.Maven仓库的依赖添加如图所示:
利用Maven管理jar包
无论要使用什么jar包,都需要去pom.xml中配置;
在dependencies下面配置项目的jar包。
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
如何找到这些jar包所在的位置呢?
1.推荐去Maven中央远程仓库中下载:地址:https://mvnrepository.com/ ,官网如图所示:
2.假设现在需要去下载jstl的jar包,直接搜索即可,如图所示:
3.选择对应的版本点击进入,如图所示:
4.进入相应的版本,然后复制Maven里面的代码,如图所示:
5.将刚才复制的代码复制到pom.xml里的<dependency.>标签中,如图所示:
本质分析
Maven会根据配置文件去对应镜像站点下载相应的jar包;
在通过配置文件去本地读取jar包。
手动创建一个Maven项目
1.随便建立一个空文件夹代表我们的项目,使用IDEA打开,如图所示:
2.手动建立目录结构,如图所示:
3.配置环境,如图所示:
4.编辑输出目录,文件标记,jdk等,如图所示:
5.检查一下Maven,如图所示:
6.编写pom.xml核心文件,代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<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.0</modelVersion>
<groupId>com.njbdqn</groupId>
<artifactId>myweb</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>myweb Maven Webapp</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<!--编译版本设置 -->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<!--依赖包 -->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!-- servlet -->
<!-- https://mvnrepository.com/artifact/javax.servlet/servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!--spring 核心-->
<!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
<!-- 被Spring 容器管理的Java对象 -->
<!-- https://mvnrepository.com/artifact/org.springframework/spring-beans -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
<!-- 应用上下文 Spring应用上下文全权负责对象的创建和组装-->
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
<!--springMVC-->
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
<!--JDBC-->
<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
<!--事务-->
<!-- https://mvnrepository.com/artifact/org.springframework/spring-tx -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
<!-- mybatis -->
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<!-- 连接mybatis和spring -->
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.2</version>
</dependency>
<!-- mysql连接 -->
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
<!-- 数据库连接池 -->
<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.8</version>
</dependency>
<!-- json数据-->
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.8</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.8</version>
</dependency>
</dependencies>
<build>
<finalName>myweb</finalName>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
7.然后让idea识别,如图所示:
8.现在来导入依赖,即jar包,如图所示:
通过<dependencies></dependencies>标签
请注意:这里我们在第六步代码中已经将jar包导入。
常见问题
假如你的项目在IDEA中可以运行成功,但是无法发布运行,可以就是没有配置资源过滤
就需要手动配置这个,代码如下:
<!--用来存放一些和项目构建相关的东西-->
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<excludes>
<exclude>**/*.properties</exclude>
<exclude>**/*.xml</exclude>
</excludes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>