一 通过archetype创建普通Java项目 (了解)
二 通过archetype创建Web项目 (了解)
三 创建普通maven项目
四 通过Java Enterprise创建web项目
增加依赖后,点击图中按钮,加载依赖
五 maven项目结构
--src
--main (存放项目的源文件)
--java (存放java代码,相当于传统项目中的src目录)
--resources (存放配置文件)
--webapp(存放web项目中页面相关资源)
--test (存放项目的单元测试代码)
--java(测试代码)
--pom.xml
六 pom文件
pom.xml,这是Maven项目的核心配置文件,pom称为Project Object Model(项目对象模型),它用于描述整个Maven项目,所以也称为Maven描述文件。描述项目用到的资源,包括源代码目录、测试代码目录等的位置,以及项目依赖的外部jar包。
每一个项目都有一个POM文件。
POM文件即pom.xml,应该放在项目的根目录下。一个项目如果分为多个子项目,一般来讲,父项目有一个POM文件,每一个子项目都有一个POM文件。在这种结构下,既可以一步构建整个项目,也可以各个子项目分开构建。
在 POM 中主要可以设置如下配置:
- 基本配置
- 插件配置
- 依赖配置
- 构建环境配置
- 部署分发配置
6.1 基本配置
<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.qfedu</groupId>
<artifactId>test</artifactId>
<version>1.0</version>
<packaging>war</packaging>
<properties>
<file.encoding>UTF-8</file.encoding>
<java.source.version>1.8</java.source.version>
<java.target.version>1.8</java.target.version>
</properties>
</project>
modelVersion | 指定了当前Maven模型的版本号,对于Maven2和Maven3来说,它只能是4.0.0 |
groupId | 公司名或是组织名。一般来说groupId是由三个部分组成,每个部分之间以"."分隔,第一部分是项目用途,比如用于商业的就是"com",用于非营利性组织的就是"org";第二部分是公司名,比如"baidu";第三部分是项目名 |
artifactId | 可以认为这是Maven构建的项目名 |
version | 版本号,SNAPSHOT意为快照,说明该项目还在开发中,是不稳定的版本 |
packaging | 项目的类型,描述了项目打包后的输出,默认是 jar,web项目可以使用war,聚合工程使用pom |
properties | 定义一些常量,在pom中的其它地方可以直接引用,如${file.encoding} |
注意:在Maven中很重要的一点是,groupId、artifactId、version三个元素生成了一个Maven项目的基本坐标(GAV坐标)
6.2 依赖配置
<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">
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.1.5.RELEASE</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-registry-zookeeper</artifactId>
<version>2.7.9</version>
<scope>compile</scope>
<!--排除log4j-->
<exclusions>
<exclusion>
<artifactId>log4j</artifactId>
<groupId>log4j</groupId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
</project>
dependencyManagement | 对依赖进行管理。 1)仅仅声明依赖的jar,这些jar不会实际引入到模块中。 2)该元素能够约束子模块中 dependencies 下依赖的使用。子模块中, dependencies 下声明的依赖若未指定版本,则使用 dependencyManagement 中指定的版本,否则,将覆盖 dependencyManagement 中的版本。 |
dependencies | 设置当前项目依赖的jar包,包含多个<dependency>子标签 |
dependency | 每个依赖的jar包对应一个dependency |
scope | 依赖范围 1)compile(编译范围) compile是默认的范围,会被打包。 2)provided(已提供范围) provided依赖只有在当JDK或者一个容器已提供该依赖之后才使用。它们不是传递性的,也不会被打包。比如,针对servlet的jar 3)runtime(运行时范围) runtime依赖在运行和测试系统的时候需要,但在编译的时候不需要。比如,针对mysql驱动的jar 4)test(测试范围)只有在测试编译和测试运行阶段可用。比如,针对junit的jar 5)system(系统范围)必须显式的提供一个对于本地系统中JAR文件的路径。注意该范围是不推荐使用。 6)import(导入范围)只能与 dependencyManagement 配合使用,用于将目标 pom.xml 文件中 dependencyManagement 的配置导入合并到当前 pom.xml 的 dependencyManagement 中 |
exclusions | 排除依赖关系的jar包,包含多个<exclusion> |
exclusion | 每个需要排除的依赖对应一个<exclusion> |
查找jar依赖的地址:https://mvnrepository.com/
6.3 构建配置
<build>
<finalName>myPorjectName</finalName>
<!-- 构建产生的所有文件存放的目录 -->
<directory>${basedir}/target</directory>
<resources>
<!--需要设置打包的文件 特别是非java文件-->
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</resource>
</resources>
</build>
build | project的子标签,用于构建配置 |
finalName | 产生的构件的文件名,默认值是${artifactId}-${version} |
build标签下的directory | 构建产生的所有文件存放的目录,默认为${basedir}/target,即项目根目录下的target |
resources | 项目相关的所有资源路径列表,例如和项目相关的配置文件、属性文件,这些资源被包含在最终的打包文件里 |
resource | 具体的资源配置,属于resources的子标签 |
resource下的directory | 描述存放资源的目录,该路径相对POM路径 |
resource下的includes | 包含的资源文件列表,**表示任意路径 |
6.4 插件配置
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<uriEncoding>UTF-8</uriEncoding>
<path>/testmaven</path>
</configuration>
</plugin>
</plugins>
pluginManagement | 与 dependencyManagement 元素的原理十分相似,仅声明插件,在子模块的plugins中配置插件才会生效 |
plugins | bulid的子标签,配置多个插件 |
plugin | 指定的插件的配置 |
configuration | 针对插件的具体配置项,配置项因插件而异 |
七 maven项目生命周期管理常用命令
1)双击对应项可以执行相关操作
2)命令行中输入命令执行
mvn compile 编译源代码
mvn clean 清理项目
mvn package 打包
mvn clean package 先清理再打包
mvn deploy 部署项目
mvn install 安装当前工程的输出文件到本地仓库
八 使用maven构建员工程序
8.1 新建maven项目
通过Java Enterprise创建web项目
8.2 修改pom文件
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- GAV坐标 -->
<!-- 公司 组织名称 域名倒序 -->
<groupId>com.qfedu</groupId>
<!-- 项目名 -->
<artifactId>empmaven</artifactId>
<!-- 版本号 -->
<version>1.0-SNAPSHOT</version>
<name>empmaven</name>
<!-- 打包 jar war -->
<packaging>war</packaging>
<!-- 属性 -->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.source>1.8</maven.compiler.source>
<!-- 自定义属性 -->
<junit.version>5.8.1</junit.version>
</properties>
<!-- 依赖的jar scope 默认complie provider-->
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>commons-dbutils</groupId>
<artifactId>commons-dbutils</artifactId>
<version>1.7</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.16</version>
</dependency>
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.76</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<!-- 项目构建 -->
<build>
<!-- 插件 -->
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.3.2</version>
</plugin>
<!-- maven编译插件 -->
<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>
<compilerVersion>1.8</compilerVersion>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<!-- tomcat插件 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<uriEncoding>UTF-8</uriEncoding>
<path>/empsys</path>
</configuration>
</plugin>
</plugins>
</build>
</project>
8.3 项目结构
注意:源码放在java目录下,和配置相关的资源文件放在resources目录下
8.4 运行项目
1)配置tomcat服务器
2)tomcat插件(了解)
或者