约定的目录结构对于 Maven 实现自动化构建而言必不可少,拿自动编译来说,Maven 必须能找到 Java源文件,下一步才能编译,而编译之后也必须有一个准确的位置保持编译得到的字节码文件。
我们在开发中如果需要让第三方工具或框架知道我们自己创建的资源在哪,那么基本上就是两种方式:
- 通过配置的形式明确告诉它
基于第三方工具或框架的约定
Maven 对工程目录结构的要求就属于后面的一种。
JavaEE领域中有这样一个共识:约定>配置>编码。
能够以配置解决的尽量不编码,能够以约定的方式解决的尽量不配置。不断地以更高的程度简化开发,这对技术的功底要求实际是越来越高的。
1.约定的目录结构
2.几个基本的Maven命令
- mvn compile 编译
- mvn clean 清理
- mvn test 测试
- mvn package 打包
※注意:运行Maven命令时一定要进入pom.xml文件所在的目录!
3.修改默认仓库
(1)默认本地仓库位置:~.m2\repository
~表示当前用户的家目录,例如:C:\Users[当前登录系统的用户名]
(2)在apache-maven-3.2.2\conf\settings.xml
下修改默认仓库地址:
<localRepository>[本地仓库路径]</localRepository>
4.测试第一个Maven工程
(1)在workspace中手动创建一个名为Hello的文件夹,Hello路径下创建一个src文件夹和一个pom.xml。
pom.xml的内容如下,关于pom的详细内容会在下一篇博客中讲解。
<?xml version="1.0" ?>
<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.gql.maven</groupId>
<artifactId>Hello</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>Hello</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.0</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
(2)在src路径下分别创建名为main和test的文件夹
(3)分别在main和test两个文件夹中创建java和resources文件夹
(4)编写主程序代码
在src/main/java/com/gql/maven
目录下新建文件Hello.java,内容如下
package com.gql.maven;
public class Hello {
public String sayHello(String name){
return "Hello "+name+"!";
}
}
(5)编写测试代码
在/src/test/java/com/gql/maven
目录下新建测试文件HelloTest.java
package com.gql.maven;
import org.junit.Test;
import static junit.framework.Assert.*;
public class HelloTest {
@Test
public void testHello(){
Hello hello = new Hello();
String results = hello.sayHello("Hudie");
assertEquals("Hello Hudie!",results);
}
}
(6)测试执行mvn package 打包
D:\Program Files\JAVA\workspace\Hello>mvn package
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Hello 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ Hello ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:2.5.1:compile (default-compile) @ Hello ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ Hello ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:2.5.1:testCompile (default-testCompile) @ Hello ---
[INFO] Compiling 1 source file to D:\Program Files\JAVA\workspace\Hello\target\test-classes
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ Hello ---
[INFO] Surefire report directory: D:\Program Files\JAVA\workspace\Hello\target\surefire-reports
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running com.gql.maven.HelloTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.017 sec
Results :
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ Hello ---
[INFO] Building jar: D:\Program Files\JAVA\workspace\Hello\target\Hello-0.0.1-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.088 s
[INFO] Finished at: 2020-02-27T12:55:28+08:00
[INFO] Final Memory: 12M/152M
[INFO] ------------------------------------------------------------------------
项目打包成功