Maven模块化开发与设计笔记

1. 模块化开发

模块化开发是将大型应用程序拆分成多个小模块的过程,每个模块负责不同的功能。这有助于降低系统复杂性,提高代码的可维护性和可扩展性。

2. 聚合模块

聚合模块(父模块)用于组织和管理多个子模块。它定义了项目的全局配置,如依赖、插件等,使得子模块可以继承这些配置。

示例代码

父模块 pom.xml

XML 复制代码
<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>parent-module</artifactId>
    <packaging>pom</packaging>

    <modules>
        <module>module-a</module>
        <module>module-b</module>
    </modules>

    <properties>
        <java.version>1.8</java.version>
        <spring.version>5.3.10</spring.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <!-- 定义版本号,子模块继承后无需再定义版本号 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter</artifactId>
                <version>${spring.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

子模块 module-a/pom.xml

XML 复制代码
<project>
    <parent>
        <groupId>com.example</groupId>
        <artifactId>parent-module</artifactId>
    </parent>

    <modelVersion>4.0.0</modelVersion>
    <artifactId>module-a</artifactId>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
</project>

3. Maven 插件管理

在父模块中定义 <pluginManagement>,子模块可以引用这些插件,而不需要重复定义插件版本。

父模块 pom.xml

XML 复制代码
<pluginManagement>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>2.4.5</version>
        </plugin>
    </plugins>
</pluginManagement>

子模块将自动继承这些插件配置。

4. 自定义属性

在父模块中定义 <properties> 标签,可以在所有子模块中使用这些属性。

父模块 pom.xml

XML 复制代码
<properties>
    <project.basedir>${project.basedir}</project.basedir>
<properties>

子模块 module-a/pom.xml

XML 复制代码
<build>
    <resources>
        <resource>
            <directory>${project.basedir}/src/main/resources</directory>
        <filtering>false</filtering>
        </resource>
    </resources>
</build>

5. 版本管理

在父模块中统一管理依赖的版本号。

父模块 pom.xml

XML 复制代码
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <version>${spring.version}</version>
        </dependency>
    </dependencies>
</dependencyManagement>

6. 多环境配置

通过定义不同的配置文件,可以适应不同的运行环境。

父模块 pom.xml

XML 复制代码
<profiles>
    <profile>
        <id>dev</id>
        <properties>
            <active.profile>dev</active.profile>
        </properties>
    </profile>
</profiles>

子模块 application-dev.yml

XML 复制代码
server:
  port: 8081
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/dev_db?useUnicode=true&characterEncoding=UTF-8&useSSL=false

7. 跳过测试

在 Maven 中,可以通过配置 maven-surefire-plugin 来跳过测试。

父模块 pom.xml

XML 复制代码
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-sure-plugin</artifactId>
            <configuration>
                <skipTests>true</skipTests>
            </configuration>
        </plugin>
    </plugins>
</build>

8. 私服配置

在 Maven 中配置私服(如 Nexus)可以方便管理依赖和插件。

settings.xml

XML 复制代码
<servers>
    <server>
        <id>nexus-releases</id>
        <username>admin</username>
        <password>admin123</password>
    </server>
</servers>

pom.xml

XML 复制代码
<repositories>
    <repository>
        <id>nexus-releases</id>
        <url><http://localhost:8081/nexus/content/repositories/releases/></url>
    </repository>
<repositories>

9. 资源上传

将构建的 JAR 文件上传到私服,可以在 pom.xml 中配置 maven-deploy-plugin 插件。

pom.xml

XML 复制代码
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-deploy-plugin</artifactId>
            <configuration>
                <repositoryId>nexus-releases</repositoryId>
                <url><http://localhost:8081/nexus/content/repositories/releases/></url>
            </configuration>
        </plugin>
    </plugins>
</build>

总结

模块化开发和 Maven 的使用可以提高项目的可维护性和可扩展性。通过聚合和继承,可以简化项目的构建和配置管理。同时,Maven 提供的多环境配置、跳过测试、私服配置等功能,使得项目可以更好地适应不同的开发和运行环境。

相关推荐
wuminyu15 分钟前
专家视角看Java字节码加载与存储指令机制
java·linux·c语言·jvm·c++
callJJ2 小时前
Spring Data Redis 两种编程模型详解:同步 vs 响应式
java·spring boot·redis·python·spring
wbs_scy2 小时前
Linux线程同步与互斥(三):线程同步深度解析之POSIX 信号量与环形队列生产者消费者模型,从原理到源码彻底吃透
java·开发语言
jinanwuhuaguo4 小时前
(第三十三篇)五月的文明奠基:OpenClaw 2026.5.2版本的文明级解读
android·java·开发语言·人工智能·github·拓扑学·openclaw
xmjd msup4 小时前
spring security 超详细使用教程(接入springboot、前后端分离)
java·spring boot·spring
952365 小时前
SpringBoot统一功能处理
java·spring boot·后端
Lyyaoo.5 小时前
优惠券秒杀业务分析
java·开发语言
消失的旧时光-19435 小时前
统一并发模型:线程、Reactor、协程本质是一件事(从线程到协程 · 第6篇·终章)
java·python·算法
勿忘初心12215 小时前
Java 国密 SM4 加密工具类实战(Hutool + BouncyCastle)|企业级数据加密 + 兼容 JDK8
java·数据安全·数据加密·后端开发·企业级开发·国密 sm4
庞轩px5 小时前
第8篇:原子类与CAS底层原理——无锁并发的实现
java·cas·乐观锁·aba·无锁编程·自旋