IDEA中创建Spring Cloud微服务项目步骤

步骤 1:使用 Spring Initializr 创建父项目

打开IntelliJ IDEA,选择 File > New > Project

选择 Spring Initializr 并配置项目信息:

  • Group ID:例如 com.aqian,用于项目的组织标识。
  • Artifact ID:例如 cangqiong(即父项目名称),用于项目的唯一标识。
  • Packaging:选择 pom,确保父项目仅作为架构项目,无需生成 src 文件夹。
  • Java version:选择您项目所需的 Java 版本。

选择项目依赖:勾选所有子模块需要的公共依赖(例如 Spring Boot Web、Spring Data JPA、Spring Boot DevTools 等)。这样公共依赖会添加到父项目的 pom.xml 中,所有子模块均能继承。

点击 Finish,完成父项目的创建。

步骤 2:删除父项目中不需要的文件夹

删除自动生成的 src 文件夹,因为父项目不包含业务代码,仅用作管理。

.mvn/ + mvnw + mvnw.cmd 是一套的:

它们是 Maven Wrapper 工具,用来:

保证团队中所有人用同一版本的 Maven 来构建项目,不用要求本地必须装 Maven

父项目中需要保留的 

文件/目录作用是否需要保留?(父项目)
.mvn/Maven wrapper 运行环境文件夹✅ 建议保留
.idea/IDEA 的项目配置文件夹(工作区信息)🚫 建议 不加入版本控制
.gitignoreGit 忽略文件列表✅ 一般要保留
mvnw, mvnw.cmdMaven wrapper 脚本(用于执行项目时不依赖本机 Maven)✅ 建议保留

 子项目中不需要保留的

文件/目录子模块是否需要?
.mvn/❌ 不需要
.idea/❌ 不建议版本控制
mvnw / mvnw.cmd❌ 不需要
.gitignore⭕ 可选(一般只在父项目有就够)

🚨 注意:

  • 你只需要在父项目中维护 Maven Wrapper 和 GitIgnore 文件

  • 子模块只需要目录结构 + pom.xml,不要加这些项目根配置

配置父项目 pom.xml 文件:确保 packaging 设置为 pom,并在 <dependencyManagement> 中添加通用依赖。

<groupId>com.aqian</groupId>
<artifactId>biguo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>

<dependencyManagement>
    <dependencies>
        <!-- 父项目定义的公共依赖,子模块会自动继承 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <!-- 可以添加其他所有子模块需要的依赖 -->
    </dependencies>
</dependencyManagement>

<build>
    <plugins>
        <!-- Spring Boot 插件,用于运行和打包 Spring Boot 应用 -->
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

如果你打算使用 Nacos 注册中心、Nacos 配置中心、Sentinel 等 Spring Cloud Alibaba 提供的组件,必须单独引入 Spring Cloud Alibaba 的依赖,因为这些组件并不包含在 Spring Cloud 官方的 starter 中。 

 <!-- Spring Cloud Alibaba BOM -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>2022.0.0.0</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>

步骤 3:为父项目添加子模块

右键父项目,选择 New > Module

选择 Spring Initializr 作为模块类型,然后配置子模块信息:

  • Group ID:与父项目相同,例如 com.aqian
  • Artifact ID:例如 module1(子模块名称)。
  • 不勾选公共依赖(如 Spring Boot Web、Data JPA 等),因为这些依赖已经在父项目中配置。

完成创建后,IDEA会生成一个包含 src 文件夹和 pom.xml 的子模块。

步骤 4:配置子模块的application.properties 并 配置子模块的pom.xml

 每个微服务是否需要设置不同端口?

  • 是的,在开发环境中,每个微服务必须使用不同的端口,原因如下:

本地开发时:所有服务都运行在同一台机器上,必须通过不同端口区分

服务注册:Eureka/Nacos等注册中心需要知道每个服务的准确访问地址(IP+端口)

配置子模块的 pom.xml

  • <parent> 中设置子模块继承父项目配置,并删除 <relativePath/> 标签,避免路径配置错误。
  • 删除 <build> 配置,使子模块直接使用父项目的构建配置,避免冗余。

示例子模块的 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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>com.aqian</groupId>
        <artifactId>cangqiong</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

    <groupId>com.aqian</groupId>
    <artifactId>module1</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <dependencies>
        <!-- 子模块特定的依赖(如果有)可以在这里添加 -->
    </dependencies>
</project>

重复以上步骤,为其他模块创建并配置 pom.xml,确保所有子模块继承父项目。

  • relativePath 默认值: 如果省略 relativePath,默认会向上查找父目录的 pom.xml
  • 如果父项目和子项目不在同一物理目录结构下,可能需要手动设置 relativePath

步骤 5:在父项目 pom.xml 中添加 <modules> 并 修改父模块的<packaging>

打开父项目的 pom.xml 文件,确保每个子模块都在 <modules> 标签中。如果没有自动添加,可以手动配置,如下所示:

<modules>
    <module>module1</module>
    <module>module2</module>
    <!-- 其他子模块名称 -->
</modules>

父模块的 packaging 必须是 pom 类型 

  • 在 Maven 多模块项目中,父模块(Parent Module)本身通常不包含可执行代码或资源文件,而是用来聚合和管理子模块。
  • 由于父模块仅作为容器管理子模块,它的 packaging 类型必须是 pom
<groupId>com.aqian</groupId>
    <artifactId>mychinchin</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging> <!-- 父模块必须是 pom -->

步骤 6:构建和测试项目

在Maven工具窗口(通常位于右侧)点击 Reload All Maven Projects,确保所有子模块和依赖加载到位。

使用 mvn install 命令:在父项目的根目录下运行 mvn install 命令,这会构建父项目及其所有子模块,并将生成的构建工件(如 .jar 文件)安装到本地Maven仓库。

mvn install 作用
mvn install 命令会执行项目的完整构建流程,包括以下步骤:

通过 mvn install,所有模块的 .jar 文件将会保存在本地仓库,便于子模块间的相互依赖和项目集成。

  • 编译:将 Java 源代码编译成字节码(.class 文件)。
  • 测试:执行单元测试并生成测试报告。
  • 打包:将编译和测试后的代码打包成 .jar 文件(或其他格式,取决于 pom.xml 中的配置)。
  • 安装:将打包生成的 .jar 文件安装到本地Maven仓库(默认路径为 ~/.m2/repository),以便其他项目或模块可以引用这些构建工件。

公共模块(common-core)被其他子模块引入的正确流程

(1)确保公共模块的 pom.xml 配置正确

  • 设置打包方式为 jar默认就是 jar,但最好显式声明):

    <parent>
        <groupId>com.yourcompany</groupId>
        <artifactId>parent-project</artifactId>
        <version>1.0.0</version>
    </parent>
    <packaging>jar</packaging>

打包方式:jar vs pom

jar(默认值)

  • 用途:将模块编译为Java库(JAR文件),包含编译后的类文件、资源文件等。

  • 典型场景

    • 公共工具模块(如common-core)。

    • 业务逻辑模块(需被其他模块依赖的代码)。

  • 示例配置

    <packaging>jar</packaging>  <!-- 默认值,可省略 -->

pom

  • 用途:仅作为父模块或聚合模块,不生成实际的JAR/WAR文件,仅用于管理子模块或统一依赖版本。

  • 典型场景

    • 多模块项目的根模块(父POM)。

    • BOM(Bill of Materials)项目,如Spring Cloud的依赖管理包。

  • 示例配置

    <packaging>pom</packaging>
  • 继承父模块(如果项目是多模块结构):

  • 禁用 spring-boot-maven-plugin(避免尝试打包成可执行 JAR):

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <skip>true</skip> <!-- 关键!禁用 repackage -->
                </configuration>
            </plugin>
        </plugins>
    </build>

(2) 构建公共模块并安装到本地 Maven 仓库

  • 进入公共模块的根目录

    cd common-core
  • 执行 Maven 安装

    mvn clean install

    成功后,common-core 的 JAR 包会被安装到本地 Maven 仓库(~/.m2/repository/com/yourcompany/common-core/1.0.0/)。

(3)在其他模块中引入该依赖

在需要引用 common-core 的模块(如 service-a)的 pom.xml 中添加:

<dependencies>
    <dependency>
        <groupId>com.yourcompany</groupId>
        <artifactId>common-core</artifactId>
        <version>1.0.0</version> <!-- 版本必须与 common-core 的 pom.xml 一致 -->
    </dependency>
</dependencies>

步骤7:配置.gitignore文件

 .gitignore文件内部用来规定哪些文件不会被提交到git仓库。

.gitignore 文件用于指定应被 Git 忽略的文件或目录,其语法规则如下:

1.空行:被忽略,可用于分隔不同的规则块。

2.注释:以 # 开头的行被视为注释。

# 这是一个注释

3.通配符

*(星号):匹配零个或多个任意字符,但不匹配路径分隔符 /

*.log  # 匹配所有以 .log 结尾的文件

?(问号):匹配任意单个字符。

config?.yml  # 匹配 config1.yml、configA.yml 等

[](方括号):匹配方括号内的任意一个字符。

test[12].txt  # 匹配 test1.txt 和 test2.txt

**(双星号):匹配任意层级的目录。

**/logs  # 匹配任意位置的 logs 目录

4.目录匹配

  • / 结尾:表示匹配目录。

    temp/  # 匹配 temp 目录
    
  • / 开头:表示从仓库根目录开始匹配。

    /build  # 仅匹配仓库根目录下的 build 文件或目录
    

5.取反匹配:以 ! 开头的模式表示例外,即不忽略匹配该模式的文件或目录。

*.log
!important.log  # 忽略所有 .log 文件,但不忽略 important.log

注意:如果父目录已被忽略,则子文件或目录即使使用取反模式也无法被包含。

6.转义字符:如果文件名中包含特殊字符(如 #! 等),可使用反斜杠 \ 进行转义。

\#important.log  # 匹配文件名为 #important.log 的文件

步骤8:为子模块配置SDK

多模块项目的配置缺失:多模块项目中,子模块的语言级别和 SDK 设置可能不会自动继承父项目配置,因此需要手动确认。

Project SDK:指定了项目使用的 JDK 版本,它提供了 Java 编译器、运行时以及核心库(如 java.lang.String 等基础类)。如果没有指定正确的 SDK,IDE 就无法找到这些核心库,从而导致无法解析符号的错误。 

如何在 IntelliJ IDEA 中设置

具体操作如下:

1.配置项目级别的 SDK 和语言级别

  • 打开 File > Project Structure > Project
  • Project SDK 下拉菜单中,选择适合的 JDK 版本。如果列表中没有目标 JDK,可以通过 New 按钮添加。
  • Project language level 下拉菜单中,选择匹配的 Java 语言级别。

2.配置模块级别的 SDK 和语言级别

  • 进入 File > Project Structure > Modules
  • 选择子模块,在右侧设置 SDK 为项目 SDK。
  • Language Level 下拉菜单中,确保选择了与项目兼容的语言级别。

步骤9:提交到Gitee远程仓库

  • 本地分支:在你的本地 Git 仓库中创建和管理的分支。每个本地分支有独立的开发历史和变更记录。
  • 远程分支:指的是在远程仓库(如 GitHub、Gitee 等)中的分支。远程分支通常与团队其他成员共享,用于协作开发。

  • 推送(Push):将本地分支的更新推送到远程分支,使团队成员看到你的改动。
  • 拉取(Pull):将远程分支的更改拉到本地分支,确保自己的代码与团队同步。

在 IntelliJ IDEA 中提交到 Gitee 仓库时,不建议直接使用 Gitee 账户的用户名和密码。Gitee 已弃用简单的账户密码方式,推荐使用 访问令牌(Access Token) 来替代密码进行身份验证。

使用 Gitee 的访问令牌(Access Token)

为什么使用访问令牌而非账户密码?

使用访问令牌比直接使用账户密码更安全,而且 Gitee 也不再允许简单密码的远程认证,因此 访问令牌 是推送和拉取代码的推荐方式。 

1. 生成 Gitee 访问令牌

  • 登录您的 Gitee 账号。
  • 点击右上角头像,选择“设置”。
  • 在左侧菜单中,选择“安全设置”。
  • 找到“私人令牌”部分,点击“生成新令牌”。
  • 为令牌命名,选择所需的权限(如 repouser 等),然后点击“生成”。
  • 注意:生成的令牌只会显示一次,请妥善保存。

2. 在 IntelliJ IDEA 中配置 Gitee 账户

  • 打开 IntelliJ IDEA,点击菜单栏的 File,选择 Settings(或 Preferences,视操作系统而定)。
  • 在设置窗口中,导航到 Version Control > GitHub
  • 点击右侧的“+”按钮,选择“Gitee”。
  • 在弹出的对话框中,选择“Log In with Token”。
  • 将之前生成的访问令牌粘贴到相应的输入框中,点击“Add Account”。

3. 提交代码到 Gitee 仓库

  • 在项目中,右键点击需要提交的文件或目录,选择 Git > Commit
  • 在提交窗口中,填写提交信息,点击“Commit”。
  • 提交后,点击“Push”按钮,将代码推送到远程 Gitee 仓库。

最终项目结构

构建完成后,项目结构如下,每个子模块下都会有一个 target 文件夹,用于存放构建结果:

cangqiong/
├── pom.xml                  # 父项目 POM 文件,包含依赖管理和模块配置
├── .gitignore               # Git 忽略文件
├── .idea/                   # IDEA 项目配置
├── module1/
│   ├── src/                 # 子模块的源代码目录
│   ├── target/              # 子模块的构建结果目录(由mvn install生成)
│   └── pom.xml              # 子模块的 POM 文件,继承父项目
└── module2/
    ├── src/
    ├── target/
    └── pom.xml

注意

  • 每个子模块的 target 文件夹在运行 mvn install 或其他构建命令时自动生成,包含 .class 文件、测试报告、打包的 .jar 文件等。建议在 .gitignore 中忽略 target 文件夹,避免提交到版本控制系统中。

完整的.gitignore 文件配置如下,其中规定了哪些文件不提交到git仓库。 

# IntelliJ IDEA 配置
.idea/
*.iml

# Maven 编译输出目录
**/target/

# 忽略操作系统生成的临时文件
.DS_Store
Thumbs.db
2022年搭建微服务的一些想法包括: 1. 选择适合的技术栈:微服务架构可以使用各种编程语言和框架来实现。根据你的需求和团队的技能水平,选择适合的技术栈是很重要的。常见的选择包括Spring Boot、Node.js、Go等。 2. 设计服务边界:微服务架构将系统拆分为多个独立的服务,每个服务都有自己的职责。在搭建微服务时,需要仔细设计每个服务的边界,确保服务之间的职责清晰,并且能够进行独立部署和扩展。 3. 选择合适的通信方式:微服务之间需要进行通信,常见的方式包括RESTful API和消息队列。根据不同的场景和需求,选择适合的通信方式是很重要的。 4. 实现服务发现与负载均衡:微服务架构中,服务的数量通常会比较多,因此需要实现服务发现和负载均衡机制,以确保请求能够正确地路由到对应的服务实例上。 5. 引入容错机制:由于微服务架构中服务之间的通信是通过网络进行的,因此需要考虑到网络延迟、故障等问题。引入容错机制,如熔断、降级和限流等,可以增加系统的可靠性和稳定性。 6. 部署与监控:微服务架构中,每个服务都是独立部署和扩展的。因此,需要建立自动化的部署流程,并实时监控服务的运行状态,及时发现和解决问题。 这些只是一些关于搭建微服务的想法,实际上在具体实施时,还需要根据你的具体需求和团队的情况进行具体的规划和实施。希望对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值