项目结构
|-- store(父项目)
|
|-- store-product(商品模块)
|
|-- store-common(工具模块)
|
|-- store-order(订单模块)
|
|-- store-system(系统功能模块)
|
|-- store-admin(项目的web入口文件)
项目结构,举个例子 ↑
pom.xml
包含常用数据
<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">
<modelVersion>4.0.0</modelVersion>
<groupId>com.kfm</groupId>
<artifactId>day1023_stage2</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>day1023_stage2 Maven Webapp</name>
<url>http://maven.apache.org</url>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.28</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.15</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<finalName>day1023_stage2</finalName>
</build>
</project>
exclusion
排除某给项目
maven 标签
-
<groupId>
:这是项目的组织或公司名称。通常,它与您的域名反向对应,例如,如果您的域名为example.com
,那么您的groupId
可能是com.example
。这个元素的作用是为了将相关的项目组织在一起,并且在构建和依赖管理时提供一种分组的方式。 -
<artifactId>
:这是项目本身的唯一名称。在一个组织内,不同的项目应该有不同的artifactId
。它代表了 Maven 仓库中的实际工件(如 JAR 文件),并且通常与项目的最终输出文件的名称相匹配。
在 Maven 的 pom.xml
文件中,有许多标签可以用于配置项目。以下是一些常见的标签:
<modelVersion>
:定义当前 POM 使用的模型版本。<groupId>
和<artifactId>
:如前所述,它们是项目的坐标。<version>
:定义项目的版本号。<packaging>
:定义项目的打包方式,例如jar
、war
或pom
。<name>
:定义项目的显示名称。<description>
:为项目提供简短的描述信息。<url>
:指向项目主页或相关文档的 URL。<properties>
:定义全局属性,可以在其他地方使用${property_name}
引用这些属性。<dependencies>
:定义项目的依赖项列表,包括依赖的 groupId、artifactId、version 等信息。<dependencyManagement>
:集中管理依赖项的版本,以便子项目可以继承这些版本。<build>
:定义构建相关的设置,如插件、资源文件等。<plugins>
:定义构建过程中的插件及其配置。<pluginManagement>
:类似于<dependencyManagement>
,用于集中管理插件的版本和配置。<resources>
:定义项目资源文件的处理规则。<testResources>
:定义测试资源文件的处理规则。<profiles>
:定义不同的构建环境(如开发、生产)下的不同配置。
这只是一部分常用的标签,Maven 还有很多其他的标签可以用来配置项目。你可以参考 Maven 官方文档了解更多详细信息:https://maven.apache.org/pom.html
多模块管理
packing标签指定打包的模式
默认是jar,如果pom文件中没有指定packaging 标签默认就是jar
Maven父工程必须遵循以下两点要求:
- packing标签必须是pom。
- 删除src目录。Maven会自动处理src目录下的文件和目录,不需要手动删除。
父类继承的两种模式:
使用dependencies标签表示子类会继承里面的依赖
使用dependencyManagement标签子类会选择继承里面的内容,不用写版本号。版本号由父类进行管理,如需特定版本可以进行书写
父子项目继承的书写
父项目pom.xml
在你的项目根目录下创建一个父项目(也叫做聚合项目)。这个项目的 pom.xml 文件将包含子模块的定义。在这个 pom.xml 文件中,你需要指定 <modules>
元素,其中包含所有子模块的相对路径。
<!-- 父项目的 pom.xml -->
<project>
<groupId>com.kfm</groupId>
<artifactId>store</artifactId>
<version>0.1.0</version>
<packaging>pom</packaging>
</project>
Maven的坐标GAV( groupId , artifactId , version )在这里进行配置,这些都是必须的。特殊的地方在于,这里的 packaging 为 pom ,所有带有子模块的项目的 packaging 都为 pom 。
子项目pom.xml
创建子模块,并定义模块之间的依赖关系在父项目所在的目录下创建子模块。每个子模块都应该有自己的 pom.xml 文件。子模块的目录结构可以根据你的项目需要进行设计。
<project>
<!-- 这里是父类组建的信息 -->
<parent>
<groupId>com.kfm</groupId>
<artifactId>store</artifactId>
<version>0.1.0</version>
<!-- 这里是父类组建pom.xml的相对路径 -->
<relativePath>../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>store-product</artifactId>
</project>
第一种方式
如上图所示
第二种方式 models
父组件不变,带上models 标签
models 只会包含父文件的子标签,不会包含孙子辈的标签
<!-- 父项目的 pom.xml -->
<project>
<groupId>com.kfm</groupId>
<artifactId>store</artifactId>
<version>0.1.0</version>
<packaging>pom</packaging>
</project>
<!-- moudule 内是子项目的artifactId -->
<modules>
<module>child-001</module>
<module>child-002</module>
</modules>
创建子组件和上个步骤相同
<project>
<!-- 这里是父类组建的信息 -->
<parent>
<groupId>com.kfm</groupId>
<artifactId>store</artifactId>
<version>0.1.0</version>
<!-- 这里省略父类组建pom.xml的相对路径 -->
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>store-product</artifactId>
</project>
新建子目录配置方式
1. 手动配置
字模块继承父组件,并在pom.xml中配置相关信息。
<parent>
<groupId>父组件名称</groupId>
<artifactId>parent的artifactId</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
2. idea自动配置
创建项目的时候选择父类是哪个,将会在父项目目录下建子类的项目。父项目没有src目录
dependencies标签
dependencies 中的依赖子类直接继承
<!-- 子模块会继承 dependencies 中的依赖 -->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>${spring.boot.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.30</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-devtools -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<version>${spring.boot.version}</version>
</dependency>
</dependencies>
dependencyManagement 标签
dependencyManagement 可选依赖,子模块可以通过声明来使用此依赖
<!-- 通过properties集中声明依赖的版本 -->
<properties>
<spring-boot-dependency>1.5.10.RELEASE</spring-boot-dependency>
</properties>
<dependencyManagement>
<dependencies>
<!-- spring的依赖形式 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot-dependency}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
子文件中不用声明版本号。按需要声明版本号。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
</parent>
插件 plugins 标签
直接在父目录配置,子组件都会有,比如java 编译级别
和dependencies用法类似
总结
父目录不允许有src目录,packaging 必须为pom,子目录可以有src目录,packaging 默认为jar
父目录管理依赖和版本号,子目录只需要调用父目录的依赖即可。
-
依赖方式一:
写dependencies (共同依赖,父类写了子类就有)
dependencyManagement 管理父目录的依赖子目录parent中relativePath 调用父目录pom.xml 的位置,还有AVG
-
依赖方式二:
写dependencies
dependencyManagement 管理子目录的依赖
models 中写入子目录的artifactId子目录parent写AVG的位置
groupid,artifactid,version