Idea创建maven项目并配置
idea自带maven,但是为了方便自己配置,最好使用自己的maven环境,在File菜单中的New Projects Settings中设置,这样在新创建项目中就会自动添加自己配置的maven环境,不需要手动更改。
Maven常用命令
Maven 对所有的功能都提供相对应的命令,maven 三大功能:管理依赖、构建项目、管理项目信息。
Maven 提供一个项目构建的模型,把编译、测试、打包、部署等都对应成一个个的生命周期阶段,并对每一个阶段提供相应的命令,程序员只需要掌握一小堆命令,这些小命令会调用不同的插件,这些插件是帮助执行相应过程的程序,就可以完成项目的构建过程。
创建maven项目的
我使用的idea创建的空项目,在空项目中添加一个maven模块。
但是项目中经常遇见一些配置文件,所以需要自己添加resource目录,并标志为resources目录。
创建完成之后默认的pom文件为(maven3.6.3):
<?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是承担这个项目或者模块所在的地址倒置,一般练习随变取 -->
<groupId>org.example</groupId>
<!-- artifactId是项目模块的名称-->
<artifactId>maventest</artifactId>
<!-- artifactId是项目模块的版本,默认是1.0-SNAPSHOT,可以更改-->
<version>1.0-SNAPSHOT</version>
<name>maventest</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<!-- properties是这个项目的一些配置,编码设置,编译和运行所使用的jdk版本,默认是1.7,还可以增加的变量之类的-->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- maven.compiler.source是编译所用的jdk版本-->
<maven.compiler.source>1.7</maven.compiler.source>
<!-- maven.compiler.target运行在那个jdk版本上-->
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<!-- 相关依赖-->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
<!-- 插件管理,不添加也会默认存在,maven的生命周期就是依靠这些插件实现的-->
<build>
<!-- pluginManagement是表示插件声明,即你在项目中的pluginManagement下声明了插件,Maven不会加载该插件,pluginManagement声明可以被继承-->
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.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>
<!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
<plugin>
<artifactId>maven-site-plugin</artifactId>
<version>3.7.1</version>
</plugin>
<plugin>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>3.0.0</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
mvn clean
清理(会删除原来编译和测试的目录,即 target 目录,但是已经 install 到仓库里的包不会删除)
使用的是maven-clean-plugin:3.1.0这个插件的功能。
mvn compile
编译主程序,maven项目目录为/src/main/java(会在当前目录下生成一个 target,里边存放编译主程序之后生成的字节码文件)
使用的是maven-resources-plugin:3.0.2和 maven-compiler-plugin:3.8.0,其中maven-resources-plugin:3.0.2的作用是将resources的文件一起放入target/classes中。
mvn test-compile
编译测试程序,maven项目项目目录为/src/test/java,(会在当前目录下生成一个 target,里边存放编译测试程序之后生成的字节码文件)
基本和mvn compile类似,不会编译之后存放的文件放在了target/test-classes中。
![](/qrcode.jpg)
mvn test-compile会默认执行前面compile的生命周期,所以会用到四个插件。
mvn test
测试(会生成一个目录surefire-reports,保存测试结果)
测试程序如下:
public class AppTest
{
/**
* Rigorous Test :-)
*/
@Test
public void testAdd(){
System.out.println("[INFO] 测试App类中的方法");
App app = new App();
int set = app.add(30,60);
Assert.assertEquals(90 , set);
}
}
执行之后,结果如下:
mvn test执行,会自动执行从compile开始的生命周期。
mvn package
打包主程序(会编译、编译测试、测试、并且按照 pom.xml 配置把主程序打包生成 jar 包或者 war 包)
通过在pom文件开始添加packaging选择是jar或者是war等。
打包之后就会出现相应的包,包的命名就是和这两个标签的结合:
mvn install
安装主程序(会把本工程打包,并且按照本工程的坐标保存到本地仓库中)
mvn deploy
部署主程序(会把本工程打包,按照本工程的坐标保存到本地库中,并且还会保存到私服仓库中。
还会自动把项目部署到 web 容器中)。