Maven实战-第十八篇(Maven中的默认约定)

Maven实战-第十八篇(Maven中的默认约定)

在之前的文章中我们介绍过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!
  • 项目目录

Maven实战-第十八篇(Maven中的默认约定)

下面我们通过下面的配置修改一下项目的源码目录,具体配置如下:

  • 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类已经执行不了。

Maven实战-第十八篇(Maven中的默认约定)

因为现在这个类的目录已经不是源码目录了,下面我们将上面的类换一个路径,放到java目录中。

Maven实战-第十八篇(Maven中的默认约定)

看上图所示,上面的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的人来说,可以会觉的,咦,源码哪去了?这样的疑问。所以只有在一些特殊情况下,才可以这么做。

给TA打赏
共{{data.count}}人
人已打赏
Maven

Maven实战-第十七篇(Maven中的依赖管理)

2023-8-9 7:07:54

Maven

Maven实战-第十九篇(Maven多模块构建)

2023-8-14 7:19:44