maven教程
https://blog.csdn.net/Scxioi0/article/details/125732811
maven基础(黑马程序员 P1~P14)
1、maven简介
2、安装
bin目录
可以看出需要配置这两个环境变量
boot目录
maven的类加载器
conf目录
核心配置
lib目录
类库
看到下面的页面就说明maven配好了
3、maven基本概念
仓库
坐标
仓库配置
默认放在 用户名/.m2/repository
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>
用户setting放在本地的repository:
4、maven项目结构
<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>
<!-- 基本设置 The Basics -->
<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>
5、maven 项目构建命令
5.1编译
在项目根目录输入
mvn compile
最终结果编译了一个源文件:
生成文件:
5.2清理
mvn clean
删除文件:
5.3测试
mvn test
测试后生成了两个测试报告文件夹:
surefire-reports
主要是测试环境和测试结果
test-classes
5.4打包
mvn package
生成一个jar
里面是只打包了源程序
5.5 安装
部署把你打包的东西放到仓库里面
mvn install
group id 决定他放的文件夹的层次
6、插件创建工程
mvn archetype:generate -DgroupId=com.itheima -DartifactId=java-project -DarchetypeArtifactId=maven-archetype-quickstart -Dversion=0.0.1-snapshot -DinterativeMode=false
自动生成:
pom.xml里面默认带着junit
默认只创建了java文件夹
自动创建了APP.java
mvn archetype:generate -DgroupId=com.itheima -DartifactId=web-project -DarchetypeArtifactId=maven-archetype-webapp -Dversion=0.0.1-snapshot -DinterativeMode=false
唯一不同的地方就是package这里要打war包
相比普通的java项目,这里面多了一个webapp的文件夹
7、idea版本创建maven工程
配置maven
手工创建maven项目
进入project structure
进入选择new module
选择maven
填写相关信息:
这里finish创建完成之后,这里文档结构还都是灰的(新版的不用自己标识),并不是一个正确的项目:
会生成:
新建一个resources:
在pom.xml中引入junit依赖:
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
刷新maven
新建Demo:
package com.itheima;
public class Demo {
public String say(String name){
System.out.println("hello "+name);
return "hello "+name;
}
}
新建测试类:
public class DemoTest {
@Test
public void testSay(){
Demo d = new Demo();
String ret = d.say("itheima");
Assert.assertEquals("hello itheima",ret);
}
}
Assert.assertEquals([String message],T expected,T actual)
比较两个参数是否相等,message是可选的消息,假如加入了该参数,则发生错误时会报告该消息。如果 expected,actual,返回true。否则调用 expected.equals(actual)来判断。
maven命令执行
进行编译:
进行测试:
配置maven的运行环境:
选择add new configuration->maven
8、idea使用骨架创建maven工程
8.1使用原型创建Java项目 quickstart
project structure->new module->勾选使用模板,输入quickstart
输入相关信息:
生成项目结构如图所示:
8.2 使用原型创建web项目 webapp
这次选中webapp这个模板
生成目录结构如图所示:
剩余目录自己补充:
9、Tomcat插件
搜索tomcat找到这个包
https://mvnrepository.com/artifact/org.apache.tomcat.maven/tomcat7-maven-plugin
<!-- https://mvnrepository.com/artifact/org.apache.tomcat.maven/tomcat7-maven-plugin -->
<dependency>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.1</version>
</dependency>
要想添加插件需要在pom.xml中添加构件
这里可以设置端口
<!-- 指定pom的模型版本-->
<modelVersion>4.0.0</modelVersion>
<!--组织id-->
<groupId>com.itheima</groupId>
<!-- 项目id-->
<artifactId>web01</artifactId>
<!-- 版本号 snapshot是开发版 release 是完成版 -->
<version>1.0-SNAPSHOT</version>
<!--打包方式,web工程打包为war,java工程打包为jar-->
<packaging>war</packaging>
10、依赖配置与依赖传递
10.1依赖管理
依赖指当前项目运行所需的jar,一个项目可以设置多个依赖
格式:
10.2依赖传递
将project03的groupid、artifactid、version粘贴到其他的pom里面,可以产生依赖传递
在project02中粘贴,可以看出来形成了对于project03的依赖传递
特殊优先:同一个pom里面后面写的覆盖前面的
10.3可选依赖
如果想让其他的不知道你依赖的东西这里可以使用<optional>
标签,这个标签的默认值是false
<dependency>
<optional>true</optional>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
10.4排除依赖
<dependency>
<groupId>org.example</groupId>
<artifactId>project03</artifactId>
<version>1.0-SNAPSHOT</version>
<exclusions>
<exclusion>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</exclusion>
</exclusions>
</dependency>
这里不需要写version
11、依赖范围
<scope>
默认值是compile
当scope是test的时候,如果pom里面写的是:
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.3</version>
<scope>test</scope>
</dependency>
只有在test这里可以使用pom里面的jar包,主程序不可以
12、生命周期与插件
生命周期可以看做是几岁,插件就是几岁干的那件事
配置jar就是对源代码打包,配置test-jar就是对测试代码打包
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.2.1</version>
<executions>
<execution>
<goals>
<goal>jar</goal>
</goals>
<phase>generate-test-resources</phase>
</execution>
</executions>
</plugin>
</plugins>
会生成这样一个jar包:
里面就是这个源码:
对test-jar打包:
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.2.1</version>
<executions>
<execution>
<goals>
<goal>test-jar</goal>
</goals>
<phase>generate-test-resources</phase>
</execution>
</executions>
</plugin>
</plugins>
也可以同时打两个jar包