在之前的文章中我们介绍过Ant管理工具,通过Ant也是可以很方便的管理我们项目编译的。但Ant和Maven有着本质的区别,第一个区别就是Ant不支持管理项目的依赖。还有一个区别是Ant需要我们自己定义相应的目录与规则才可以实现项目编译的效果,而Maven则是通过插件的方式实现的。虽然Ant这种方式比较自由,但也带来了相应的弊端。例如重复性的建设,构建脚本不可重复使用等问题,因为不同的机器环境,指定的目录可能不一样。Maven为了解决上述的问题,制定了相应的默认规则,我们只要按照这个约定的规则来配置,Maven就可以自动的帮助我们进行项目的构建、编译、打包等功能,而不需要额外的配置。这也非常符合现在软件开发理念约定优于配置。下面我们详细了解一下Maven中都定义了哪些默认的约定。
默认约定 | 描述 |
---|---|
src/main/java | 项目源码目录 |
target/classes | 编译输出目录 |
jar | 打包方式 |
target | 包输出目录 |
src/main/resources | 项目配置文件目录 |
src/main/webapp | web项目资源文件目录 |
src/test/java | 项目测试源码目录 |
src/test/resources | 项目测试配置文件目录 |
下面我们通过代码测试一下,我们以mazhe-maven-mall
项目为例来验证一下,我们先看一下mazhe-maven-mall
项目的配置。
- pom.xml(mazhe-maven-mall)
<?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">
<parent>
<artifactId>midai-mazhe-maven</artifactId>
<groupId>cn.ma-zhe</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>mazhe-maven-mall</artifactId>
</project>
- MazheMavenMall
public class MazheMavenMall {
public static void main(String[] args) throws Exception {
System.out.println("Hello World Mazhe Maven Mall!");
}
}
- 日志
Hello World Mazhe Maven Mall!
- 项目目录
下面我们通过下面的配置修改一下项目的源码目录,具体配置如下:
- pom.xml(mazhe-maven-mall)
<?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">
<parent>
<artifactId>midai-mazhe-maven</artifactId>
<groupId>cn.ma-zhe</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>mazhe-maven-mall</artifactId>
<build>
<sourceDirectory>java</sourceDirectory>
</build>
</project>
当我们配置上面的信息后,发现之前可以执行的MazheMavenMall
类已经执行不了。
因为现在这个类的目录已经不是源码目录了,下面我们将上面的类换一个路径,放到java目录中。
看上图所示,上面的Java类以可以执行了,下面我们执行测试一下。
- 日志
Hello World Mazhe Maven Mall!
看上面的日志输出,成功的执行了MazheMavenMall
类的代码,这也就说明了我们通过上面的的配置,已经成功的将Maven的源码目录由src/main/java
修改为了java
。
下面我是默认约定与配置标签映射的关系。
默认约定 | 配置标签 |
---|---|
src/main/java | <sourceDirectory></sourceDirectory> |
target/classes | <outputDirectory></outputDirectory> |
jar | <packaging></packaging> |
target | <directory></directory> |
src/main/resources | <resources></resources> |
src/test/java | <testSourceDirectory></testSourceDirectory> |
src/test/resources | <testResources></testResources> |
虽然Maven提供了以上的功能实现了,我们可以自定义修改Maven默认的配置,但在实际的开发中,并不推荐这样做,因为这样会造成误解,特别是熟悉Maven的人来说,可以会觉的,咦,源码哪去了?这样的疑问。所以只有在一些特殊情况下,才可以这么做。