Maven的作用
Maven的作用我们可以分成三类:
(1)项目构建:提供标准的,跨平台的自动化构建项目的方式
(2)依赖管理:方便快捷的管理项目依赖的资源(jar包),避免资源间的版本冲突等问题
(3)统一开发结构:提供标准的,统一的项目开发结构,如下图所示:
各目录存放资源类型说明:
-
src/main/java:项目java源码
-
src/main/resources:项目的相关配置文件(比如mybatis配置,xml映射配置,自定义配置文件等)
-
src/main/webapp:web资源(比如html,css,js等)
-
src/test/java:测试代码
-
src/test/resources:测试相关配置文件
-
src/pom.xml:项目pom文件
仓库
创建一个工程
- 创建pom.xml文件,放到src文件中
<?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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.itheima</groupId>
<artifactId>project-java</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
</project>
- cmd语法
-
mvn compile
#编译 -
mvn clean
#清理 -
mvn test
#测试- 测试文件在这里~\target\surefire-reports
-
mvn package
#打包-
打包前会compile,test
-
打包源程序 ~\target
-
-
mvn install
#安装到本地仓库 -
我的在这个位置D:\maven\repository
-
mvn archetype:generate
直接创建一个工程 前面是现成的项目变成工程
idea创建Maven工程
快捷键Ctrl+Alt+Shift+s
- 创建新项目
- 文件 -> 新建 -> 新模块
- 创建完记得添加依赖
web
在web.xml中加插件之后才能tomcat7 run
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>80</port>
<path>/</path>
</configuration>
</plugin>
</plugins>
</build>
依赖管理
依赖配置
一个工程配置的依赖
,可以调用依赖所用到的依赖
,这里前面的依赖可以是现成的,也可以是自己开发的项目。
前一个依赖是直接依赖,后面的是间接依赖
例如这样
<dependency>
<groupId>com.itheima</groupId>
<artifactId>SpringWeb</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
SpringWeb为本地的一个工程,位置在com.itheima
这样将这段依赖添加到别的工程中,别的工程就可以用SpringWeb工程以及其依赖
冲突
- 冲突就看谁先依赖到,即深度
可选依赖
<optional>false</optional>
加到自己的依赖里面,别人调用你的时候无法调用你隐藏的这个依赖
排除依赖
将这个加入自己的某个依赖后就可以不调用这个依赖的log4j依赖
-
<exclusions> <exclusion> <groupId>log4j</groupId> <artifactId>log4j</artifactId> </exclusion> </exclusions>
可选是别人无法用你的依赖,排除是排除自己依赖的依赖
依赖范围
<scope> </scope>
- compile
- test
- provided
- runtime
生命周期与插件
生命周期
maven生命周期大体分为三类
- clear生命周期
- default生命周期
- 里面包含好多具体的阶段
- site构建生命周期
插件
可以通过插件与生命周期绑定
放到插件下面,表示走到生命周期generate-resources
时运行jar
操作(打包源代码)
使用executions
要有插件maven-source-plugin
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.2.1</version>
<executions>
<execution>
<goals>
<goal>jar</goal>
</goals>
<phase>generate-resources</phase>
</execution>
</executions>
模块
分模块开发
别的模块要调用其他模块就加dependency
就可以
-
创建对应模块
-
书写对应模块
-
通过maven指令安装模块到本地仓库
聚合与继承
父工程的打包方式是pom
,默认是jar,web工程是war
聚合
将多个模块组织成一个整体,同时进行项目构建的过程成为聚合(快速构建多个工程
构建关系是根据依赖来的跟这里写的顺序没有关系
<modules>
<module>路径1/工程名1</module>
<module>路径2/工程名2</module>
<module>路径3/工程名3</module>
</modules>
继承
pom.xml中配置的继承
- 首先在子工程中继承父工程 parent
<parent>
<groupId>com.itheima</groupId>
<artifactId>SpringWeb</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath>相对路径</relativePath>
</parent>
- 依赖管理
父工程中如果直接dependencies,所有子工程都会继承
加了dependencyManagement还需要在需要这个继承的子工程中配置,不用加版本号就好,会从父工程中取
<dependencyManagement>
<dependencies>
可选依赖
</dependencies>
</dependencyManagement>
属性
属性可以集中版本管理
<properties>
<自定义标签名称>内容</自定义标签名称>
<spring-webmvc.verson>5.2.10.RELEASE</spring-webmvc.verson>
</properties>
配置文件加载属性
将pom中的属性调整为别的部分(就是directory中的路径)也可以访问
${project.basedir}
表示当前目录
<build>
<resources>
<resource>
<directory>${project.basedir}/...</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
- 可以忽略web.xml检查的配置
版本管理
多环境开发
- 定义多环境
<!-- 自定义多环境-->
<properties>
<!-- 自定义具体的环境,可以配置多个profile-->
<profile>
<!-- 名称-->
<id>env_dep</id>
<!-- 要配置的数据-->
<properties>
<jdbc.url>.....1</jdbc.url>
</properties>
<!-- 是否为默认打开-->
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
</properties>
- 使用多环境
mvn 指令 -P 环境定义id
跳过测试
mvn 指令 -D skipTests
- 细粒度控制跳过插件(选择哪些要跳过)
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.12.4</version>
<configuration>
<!--是否跳过-->
<skipTests>false</skipTests>
<!--跳过哪些,要写到具体的java文件-->
<includes>
<include></include>
</includes>
<!--不跳过哪些-->
<excludes>
<exclude></exclude>
</excludes>
</configuration>
</plugin>
私服
配置
先到maven安装目录,conf文件夹下面的setting.xml
server是对私服的权限配置
<server>
<id>私服名</id>
<username>账号</username>
<password>密码</password>
</server>
mirror映射配置地址
<mirror>
<id>仓库组(group)的名字</id>
<mirrorOf>*</mirrorOf>
<url>地址</url>
</mirror>
上传于下载
上传
mvn deploy
指令是发布到私服
将要上传的工程pom.xml进行配置
<distributionManagement>
<repository>
<id>正式版</id>
<url>地址</url>
</repository>
<snapshotRepository>
<id>测试版</id>
<url>地址</url>
</snapshotRepository>
</distributionManagement>
然后deploy即可