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 提供的多环境配置、跳过测试、私服配置等功能,使得项目可以更好地适应不同的开发和运行环境。

相关推荐
三翼鸟数字化技术团队3 分钟前
高性能存储引擎RocksDB:原理与Java生态实践
java
SL_staff18 分钟前
JVS-APS有限产能建模的七个刚性支点:面向产线真实约束的技术实现解析
java·开源·全栈
特立独行的猫A19 分钟前
少 3 个环节、少 1 次 ABI、少 3500 行代码:cj-tauri 与 Ionic/Capacitor 的鸿蒙桥接机制对比
java·后端·python
学长毕设34 分钟前
基于SpringBoot的高校后勤报修管理系统-附源码
java·spring boot·后端
特立独行的猫A43 分钟前
cj-tauri vs Rust/Tauri 同款播放器实测:编译 21 秒 vs 11 分钟,磁盘 12 MB vs 1.2 GB
java·后端·python
杨凯凡1 小时前
Spring AI RAG 实战:向量检索、租户过滤、引用溯源与防幻觉边界
java·人工智能·spring
小科先生2 小时前
Java springboot调用数据库的基本流程
java·数据库·spring boot
秋饼3 小时前
GPT-Live 全双工语音 API Java 服务端落地实战:事件协议、会话恢复与生产踩坑
java·ai·技术分享·后端开发
SL_staff3 小时前
为什么企业级自动化不能只靠AI编排?——逻辑引擎在确定性业务场景中的不可替代性
java·开源·产品
Pniubi4 小时前
MySQL靠什么实现事务的?事务隔离级别有哪些?
java·数据库·mysql