新建系统变量
编辑系统Path变量,新建
groupId:定义当前Maven项目隶属组织名称(通常是域名反写,例如:org.mybaits) artifactId:定义当前Maven项目名称(通常是模块名称,例如CRM、SMS) version:定义当前项目版本号 packaging:定义该项目的打包方式
Maven启动后,会自动保存下载的资源到本地仓库
在maven文件/conf/settings.xml配置文件中
默认位置
<localRepository>${user.home}/.m2/repository</localRepository>
当前目录位置为登录用户名所在目录下的.m2文件夹中
自定义位置
<localRepository>D:\maven\repository</localRepository>
当前目录位置为D:\maven\repository文件夹中
Maven默认连接的仓库位置
在maven文件/lib/pom-4.0.0.xml配置文件中
<repositories>
<repository>
<id>central</id>
<name>Central Repository</name>
<url>https://repo.maven.apache.org/maven2</url>
<layout>default</layout>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
镜像仓库配置
<mirrors>
<!-- 配置具体的仓库的下载镜像 -->
<mirror>
<!-- 此镜像的唯一标识符,用来区分不同的mirror元素 -->
<id>nexus-aliyun</id>
<!-- 对哪种仓库进行镜像,简单说就是替代哪个仓库 -->
<mirrorOf>central</mirrorOf>
<!-- 镜像名称 -->
<name>Nexus aliyun</name>
<!-- 镜像URL -->
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
</mirrors>
├── Project
│ └── java-project
│ └── src
│ ├── main
│ | └── java
│ | └── resources
│ ├── test
│ └── java
│ └── resources
<?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">
<groupId>com.study</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>
测试完之后,target里面有个文件夹surefire-reports里面有两个文件,一个text,还有一个xml文件,是target提供的测试报告。
打包里面会先进行编译,然后测试程序的编译,执行test,测试结果输出,最后执行打包指令。(保证正确性)
groupId决定了一层目录,项目名称又决定了一层目录,版本号又决定了一层目录
mvn archetype:generate
-DgroupId={project-packaging}
-DartifactId={project-name}
-DarchetypeArtifactId=maven-archetype-quickstart
-DinteractiveMode=false
mvn archetype:generate -DgroupId=com.frx -DartifactId=java-project -
DarchetypeArtifactId=maven-archetype-quickstart -Dversion=0.0.1-snapshot -
DinteractiveMode=false
mvn archetype:generate -DgroupId=com.frx -DartifactId=web-project -
DarchetypeArtifactId=maven-archetype-webapp -Dversion=0.0.1-snapshot -
DinteractiveMode=false
新建一个空白项目,找到File->Settings->Maven,修改Maven_home path、User setting file和Local respository。
好处:可以打断点,添加一个运行,就可以进行调试
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.1</version>
<configuration>
<port>9000</port>
<path>/</path>
</configuration>
</plugin>
</plugins>
</build>
换了个端口 访问成功了
<?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">
<!--指定pom的模型版本-->
<modelVersion>4.0.0</modelVersion>
<!--打包方式,web工程打包为war,java工程打包为jar-->
<packaging>war</packaging>
<name>web01</name>
<!--name可以删掉-->
<groupId>com.frx02</groupId>
<!--组织Id-->
<!--项目id-->
<artifactId>web01</artifactId>
<!--版本号:release(完整版),snapshot(开发版)-->
<version>1.0-SNAPSHOT</version>
<!--设置当前工程的所有依赖-->
<dependencies>
<!--具体的依赖-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
<!-- 构建-->
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.1</version>
<configuration>
<port>9000</port>
<path>/</path>
</configuration>
</plugin>
</plugins>
</build>
</project>
依赖指当前项目运行所需的jar,一个项目可以设置多个依赖
格式:
<! --设置当前项目所依赖的所有jar-->
<dependencies>
<! --设置具体的依赖-->
<dependency>
<! --设置所属群组id-->
<groupId>junit</groupId>
<! --依赖所属项目id-->
<artifactId>junit</artifactId>
<! --依赖版本号-->
<version>4.13</version>
<scope>test</scope>
</dependency>
</dependencies>
比如,把项目三作为一个资源配置到项目二 注意:不考虑依赖范围,项目二就可以使用项目三中所有的依赖
<dependencies>
<dependency>
<groupId>com.frx03</groupId>
<artifactId>project03</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
根据某一个项目为根,对它所依赖的资源进行深度标注,比如说直接依赖,称为1度资源
控制别人能不能看到自己的东西
例如:将项目二中log4j设为可选依赖
<dependencies>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.14</version>
<optional>true</optional>
</dependency>
</dependencies>
你传递过来,我不要 例如:在项目二中排除从项目三依赖的资源log4j
<dependency>
<groupId>com.frx03</groupId>
<artifactId>project03</artifactId>
<version>1.0-SNAPSHOT</version>
<exclusions>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>
scope | 主代码 | 测试代码 | 打包 | 范例 |
---|---|---|---|---|
compile(默认) | Y | Y | Y | log4j |
test | Y | junit | ||
provided | Y | Y | servlet-api | |
runtime | Y | jdbc |
例如:把项目中mybatis依赖配置范围为test
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.3</version>
<scope>test</scope>
</dependency>
例如:项目一依赖项目二的资源,把项目一看成直接依赖,项目一的依赖范围为compile;项目二看成间接依赖,项目二的mybaits依赖范围为runtime.最后在项目一中依赖生成的mybatis依赖范围为runtime
注意:这里的直接依赖和间接依赖是对依赖生成后的结果来说的(例如项目一依赖生成的mybatis)
添加打印maven源代码的插件
<build>
<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>
</build>
安装到本地仓库,有两个jar包,一个是它本身的,另一个是maven-sources
当然,也可以添加
<goal>test-jar</goal>
这时安装到本地,有三个jar包,有两个jar包,一个是它本身的,另一个是maven-sources,还有一个是测试源代码
生命周期指的是运行的阶段,插件是为了支持生命周期那些事情;生命周期可以理解为几岁,插件可以理解为几岁干的那件事.