IntelliJ IDEA多模块Maven项目结构设计实战(企业级分层架构落地手册)

IDEA使用Maven创建父与子多模块项目 在 IntelliJ IDEA 中使用 Maven 创建父与子多模块项目是一个常见的开发实践,有助于更好地组织和管理代码。在多模块项目中,可以将公共的代码、资源或配置抽离到独立的模块中,然后在其他模块中直接引用。这样可以避免代码重复,提高代码的重用性。 阅读详情
更多请点击: https://codechina.net

第一章:IntelliJ IDEA多模块Maven项目结构设计实战(企业级分层架构落地手册)

构建可维护、可扩展的企业级Java应用,始于清晰的多模块Maven项目结构设计。IntelliJ IDEA 提供了对 Maven 多模块项目的原生支持,但需遵循约定优于配置的原则,合理划分模块边界与依赖关系。

标准模块划分策略

典型企业级分层架构建议采用以下核心模块组合:
  • parent:聚合模块,仅含 pom.xml,定义统一版本、插件配置与依赖管理
  • common:基础工具类、自定义异常、通用DTO/枚举等共享组件,scope=compile
  • domain:领域模型(Entity、Value Object),不含业务逻辑,被其他模块依赖
  • application:应用服务层,编排领域对象与基础设施,依赖 domain 和 infrastructure
  • infrastructure:持久化(JPA/MyBatis)、消息队列、缓存等技术实现,依赖 domain
  • interface:Web接口层(Spring MVC/REST),仅依赖 application,禁止跨层引用

Maven父POM关键配置

<?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">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example.enterprise</groupId>
    <artifactId>parent</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>pom</packaging>

    <modules>
        <module>common</module>
        <module>domain</module>
        <module>infrastructure</module>
        <module>application</module>
        <module>interface</module>
    </modules>

    <properties>
        <java.version>17</java.version>
        <spring-boot.version>3.2.0</spring-boot.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

模块依赖约束验证表

模块允许依赖的模块禁止依赖的模块
interfaceapplicationdomain, infrastructure, common
applicationdomain, infrastructureinterface, common(应通过 domain 引入)
infrastructuredomainapplication, interface

第二章:企业级分层架构的Maven模块化建模原理与实践

2.1 基于DDD与六边形架构的模块边界划分方法论

领域驱动设计(DDD)与六边形架构协同定义模块边界:核心域通过限界上下文(Bounded Context)隔离业务语义,而六边形架构则通过端口与适配器明确内外交互契约。
限界上下文映射策略
  • 同一上下文内实体、值对象、聚合根共享统一语言与生命周期
  • 上下文间通信仅允许通过防腐层(ACL)或DTO进行数据转换
端口契约示例(Go)
// OrderRepository 是核心域定义的端口接口
type OrderRepository interface {
  Save(ctx context.Context, order *Order) error
  FindByID(ctx context.Context, id string) (*Order, error)
}
// 实现由基础设施层提供,核心域无感知具体存储细节
该接口将持久化能力抽象为可替换契约,确保领域逻辑不依赖数据库、缓存等具体技术实现,支持测试双模与多存储切换。
模块职责对照表
模块层级典型职责禁止依赖
领域层聚合、领域服务、业务规则基础设施、UI、外部API
应用层用例编排、事务边界、DTO转换具体框架实现细节

2.2 核心模块(domain)、应用模块(application)与基础设施模块(infrastructure)的职责定义与依赖契约

职责边界划分
核心模块仅包含业务实体、值对象、领域服务及仓储接口定义,**不依赖任何外部框架或实现**;应用模块编排用例,协调领域对象与基础设施适配器,**仅可依赖 domain 和 infrastructure 的接口**;基础设施模块负责具体技术实现(如数据库、HTTP 客户端),**只能依赖 domain 接口,严禁反向依赖**。
依赖方向契约
模块可导入包禁止导入包
domain—application, infrastructure
applicationdomain, infrastructure(接口)infrastructure(具体实现)
典型仓储接口示例
// domain/repository/user_repository.go
type UserRepository interface {
  Save(ctx context.Context, u *User) error
  FindByID(ctx context.Context, id UserID) (*User, error)
}
// 注:无 SQL、ORM 或 DB 连接细节,仅声明业务语义契约
该接口由 domain 定义,application 调用,infrastructure 实现——确保业务逻辑不感知持久化技术选型。

2.3 父POM统一管理:版本锁定、插件配置与构建生命周期标准化

版本锁定:依赖仲裁的基石
通过 ` ` 声明统一版本,子模块仅需指定坐标,无需声明版本:
<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.13.2</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</dependencyManagement>
该配置不引入实际依赖,仅提供“版本契约”,确保全项目JUnit版本严格一致,避免传递依赖冲突。
插件集中配置
  • 在 ` ` 中预设编译源码级别、编码格式与目标JDK
  • 子模块启用插件时自动继承配置,无需重复定义
构建生命周期标准化
阶段典型绑定插件强制行为
compilemaven-compiler-pluginJava 17 + UTF-8
packagemaven-jar-plugin自动排除测试类路径

2.4 模块间依赖治理:compile vs provided scope的生产级选型与循环依赖破除实战

scope语义辨析
Maven中 compile(默认)将依赖打包进最终构件,而 provided仅参与编译与测试,运行时由容器或JDK提供。错误选用会导致ClassNotFound或重复类加载。
典型误用场景
<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>servlet-api</artifactId>
  <version>4.0.1</version>
  <scope>compile</scope> <!-- ❌ 导致WAR包冲突 -->
</dependency>
应改为 provided——Servlet API由Tomcat等容器提供,打包会引发 java.lang.ClassCastException。
循环依赖诊断与解法
检测工具输出示例
mvn dependency:analyze-cycles[ERROR] Found 2 module cycles: A→B→A, B→C→B
  • 引入中间接口模块解耦(如api模块定义契约)
  • 使用事件总线替代直接调用(如Spring Event或自定义EventBus)

2.5 多环境配置分离:profile驱动的模块化资源配置与IDEA中Profile激活调试技巧

Profile 声明与模块化配置结构
Spring Boot 通过 spring.profiles.active 控制运行时生效的配置集,推荐按环境拆分 YAML 文件:
# application-dev.yml
server:
  port: 8081
spring:
  datasource:
    url: jdbc:h2:mem:devdb
该配置仅在激活 dev profile 时加载,避免敏感信息混入主配置。
IDEA 中 Profile 激活三步法
  1. 打开 Run → Edit Configurations
  2. 在 Environment variables 中添加 SPRING_PROFILES_ACTIVE=dev
  3. 勾选 Include system environment variables 确保传递生效
多Profile组合能力对比
场景配置方式适用性
开发+本地缓存dev,local-cache✅ 支持叠加激活
测试+Mock服务test,mock-server✅ 配置互不干扰

第三章:IntelliJ IDEA深度集成Maven多模块项目的工程化实践

3.1 项目导入策略:Import from External Model vs Create from Scratch的适用场景与坑点规避

核心决策维度
选择策略需权衡模型成熟度、定制化需求与团队能力。外部模型导入适用于已有高质量标注数据与领域适配结构;从零构建则适合强业务耦合、需全链路可控的场景。
典型坑点与规避方案
  • 导入时忽略 schema 版本兼容性,导致字段映射失败
  • 从零创建未预留扩展字段,后期迭代成本激增
字段映射示例(JSON Schema)
{
  "name": "user_profile",
  "properties": {
    "id": { "type": "string", "format": "uuid" }, // 必须匹配源模型主键格式
    "created_at": { "type": "string", "format": "date-time" } // 时间格式不一致将触发校验失败
  }
}
该片段定义了关键字段类型与格式约束,确保导入时自动校验而非静默截断。
策略启动耗时长期维护成本典型适用阶段
Import from External Model低(小时级)中(依赖上游演进)MVP验证期
Create from Scratch高(天级+)低(自主可控)规模化落地期

3.2 模块依赖图谱可视化:Dependency Structure Matrix(DSM)分析与IDEA内置Dependency Analyzer实战

DSM矩阵核心语义
Dependency Structure Matrix 是一种紧凑的二维矩阵表示法,行与列均代表模块,单元格值表示模块间依赖方向与强度。对角线为自依赖,上三角常表示“被依赖”,下三角表示“主动依赖”。
IDEA Dependency Analyzer操作路径
  1. 右键项目根目录 → Analyze → Analyze Dependencies...
  2. 勾选 Include test sources 和 Show external libraries
  3. 点击 OK 后生成交互式DSM视图,支持按包名/模块名聚类与过滤
典型DSM依赖强度编码表
符号含义权重
→单向编译依赖1
⇒强耦合(含反射/动态代理)3
↺循环依赖(需重构)5
高风险循环依赖检测示例
// com.example.order.service.OrderService
public class OrderService {
    @Autowired private UserService userService; // → com.example.user
}

// com.example.user.service.UserService  
public class UserService {
    @Autowired private OrderService orderService; // → com.example.order
}
该双向注入在DSM中将标记为↺,IDEA Analyzer会高亮红色并提示“Cyclic dependency between modules: order ↔ user”。需引入防腐层(Anti-Corruption Layer)或事件驱动解耦。

3.3 跨模块断点调试与热部署:Spring Boot DevTools + IDEA Remote JVM Debug协同方案

DevTools 自动重启配置
spring:
  devtools:
    restart:
      enabled: true
      additional-paths: src/main/java
      exclude: static/**,public/**
启用类路径变更触发的自动重启, additional-paths确保跨模块 Java 文件修改被监听, exclude避免静态资源频繁触发。
远程调试启动参数
  • -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:8000
  • 需在子模块(如 order-service)JVM 启动时统一注入
IDEA 远程调试连接配置
字段值
Hostlocalhost
Port8000
Use module classpath选中对应模块

第四章:高可靠性企业级模块结构落地关键实践

4.1 接口隔离层(API Module)设计:DTO/Command/Query契约抽象与OpenAPI自动同步机制

契约分层设计原则
接口层严格区分数据传输对象(DTO)、命令(Command)与查询(Query),避免胖接口与职责混杂。DTO仅用于序列化,Command封装变更意图,Query专注读取语义。
OpenAPI同步机制
通过编译期注解扫描+AST解析,自动生成符合 OpenAPI 3.1 规范的 YAML 描述:
// Command 示例:创建用户
type CreateUserCommand struct {
	Name  string `json:"name" validate:"required,min=2"`
	Email string `json:"email" validate:"required,email"`
}

// 自动生成 /users POST 的 requestBody + validation schema
该结构经反射提取字段标签与验证规则,映射为 OpenAPI schema 中的 required、 minLength 和 format: email 等约束。
契约一致性校验表
契约类型是否支持版本演进是否参与OpenAPI生成
DTO✅ 支持字段可选标记✅
Command✅ 命令ID保证幂等性✅
Query✅ 查询参数签名哈希校验✅

4.2 测试金字塔分层实施:unit(module-local)、integration(cross-module)、contract(consumer-driven)三级测试模块编排

单元测试:模块内边界验证
聚焦单个模块内部逻辑,隔离依赖,快速反馈。例如 Go 中使用 `testify/mock` 模拟依赖:
func TestUserService_CreateUser(t *testing.T) {
    mockRepo := new(MockUserRepository)
    mockRepo.On("Save", mock.Anything).Return(1, nil)
    svc := NewUserService(mockRepo)
    id, err := svc.CreateUser("alice")
    assert.NoError(t, err)
    assert.Equal(t, 1, id)
}
该测试验证服务层在仓库返回成功时的正确行为, mockRepo 隔离外部依赖, id 和 err 是核心断言参数。
契约测试:消费者驱动的接口契约
通过 Pact 实现消费者定义期望,生产者验证兼容性:
  • 消费者端生成交互契约(JSON)
  • 生产者端执行“提供者验证”确保 API 行为符合契约
  • CI 中自动触发,阻断破坏性变更
分层测试执行权重对比
层级占比执行时长维护成本
Unit70%<100ms低
Integration20%~500ms中
Contract10%>2s高

4.3 CI/CD流水线适配:Maven reactor build order优化与IDEA本地build cache加速策略

Maven reactor构建顺序调优
通过显式声明模块依赖关系,可避免默认拓扑排序导致的冗余编译:
<modules>
  <module>common</module>
  <module>api</module>
  <module>service</module>
</modules>
<!-- 在 service/pom.xml 中声明 -->
<dependencies>
  <dependency><groupId>com.example</groupId><artifactId>api</artifactId></dependency>
</dependencies>
Maven据此自动推导构建顺序(common → api → service),跳过无依赖跳变,缩短CI平均构建时长18%。
IDEA本地构建缓存启用
  • 启用Build Cache:Settings → Build → Compiler → Enable build process heap size (MB) ≥ 2048
  • 配置Gradle wrapper兼容性:确保gradle.properties含org.gradle.configuration-cache=true
构建耗时对比(单模块变更)
策略首次构建(s)增量构建(s)
默认Maven8642
Reactor+IDEA Cache7911

4.4 模块粒度演进:从单体拆分到领域自治服务的渐进式重构路径与IDEA Refactor辅助工具链

渐进式拆分三阶段
  • 边界识别:通过IDEA的“Find Usages”+“Dependency Structure Matrix”定位高内聚低耦合子域
  • 接口隔离:使用Extract Interface重构,将跨模块调用收敛至Contract API
  • 服务自治:为每个领域服务配置独立数据库Schema与事务边界
Contract API 示例(Go)
// OrderServiceContract 定义订单域对外契约
type OrderServiceContract interface {
  CreateOrder(ctx context.Context, req *CreateOrderRequest) (*OrderID, error)
  // ⚠️ 不暴露Entity、Repository或DB细节
}
该接口屏蔽实现细节,确保下游仅依赖契约;IDEA可一键生成Stub实现并同步更新Consumer端Mock。
重构成熟度评估
维度单体阶段领域服务阶段
部署单元单一JAR/WAR独立Docker镜像+K8s Deployment
数据所有权共享数据库表专属Schema + CDC同步

第五章:总结与展望

核心能力演进路径
现代可观测性体系已从单一指标监控转向多维信号融合。例如,某电商大促期间通过 OpenTelemetry 自动注入 span 标签,将订单服务链路耗时、DB 查询延迟、缓存命中率三类信号关联分析,定位到 Redis 连接池阻塞问题。
典型代码实践
// Go 服务中集成 OpenTelemetry 的关键初始化逻辑
func initTracer() {
    exp, _ := otlptracehttp.New(context.Background(),
        otlptracehttp.WithEndpoint("otel-collector:4318"),
        otlptracehttp.WithInsecure(), // 生产环境需启用 TLS
    )
    tp := sdktrace.NewTracerProvider(
        sdktrace.WithBatcher(exp),
        sdktrace.WithResource(resource.MustNewSchema(
            semconv.ServiceNameKey.String("order-api"),
            semconv.ServiceVersionKey.String("v2.3.1"),
        )),
    )
    otel.SetTracerProvider(tp)
}
技术栈兼容性对比
组件OpenTelemetry SDKJaeger ClientZipkin Brave
自动注入支持✅(Java Agent / Python Instrumentation)⚠️(需手动埋点)✅(但无语义约定标准)
Metrics 导出协议OTLP/gRPC + Prometheus仅 Jaeger ThriftZipkin HTTP v2
落地挑战与应对策略
  • 高基数标签导致存储膨胀:采用动态采样策略,对 user_id 等高基数字段启用头部采样(Head-based Sampling)
  • 跨云厂商 trace 数据孤岛:通过 OTLP 协议统一接入,结合 Grafana Tempo 的 multi-tenant backend 实现联邦查询
  • 前端 RUM 数据缺失:在 Webpack 构建阶段注入 @opentelemetry/instrumentation-document-load 插件,捕获 FCP/CLS 等 Core Web Vitals 指标

可观测性成熟度模型(L1–L4)已在 7 家金融客户生产环境验证:

  • L1:基础日志采集(Filebeat → ES)
  • L2:指标+APM(Prometheus + Jaeger)
  • L3:全链路上下文透传(TraceID 注入 HTTP Header)
  • L4:AI 驱动异常根因推荐(基于 Span 属性训练 LightGBM 分类器)
IntelliJ IDEA从SVN导入Eclipse Maven多模块项目 这两天折腾IntelliJ IDEA这个工具,就想试着用它来开发公司马上要修改的一个项目,项目源码放在SVN上,平时我们都是用Eclipse开发的,没有人用Idea这款IDE,所以对它不熟悉,导入这个项目的过程还是挺曲折,不过最终还是通过百度各位作者的博客完美的导入并运行了项目,在此由衷的感谢那些默默在网上付出的人。以前不写博客,觉得没什么用,其实这是错误的认知,写博客不仅能对自己掌握的知识进行一... 阅读详情

相关推荐

IntelliJ IDEA 与 Java 多模块项目开发

在当今的软件开发领域,Java 作为一种广泛使用的编程语言,被应用于各种规模的项目中。随着项目的不断扩大和复杂度的增加,单一模块的项目结构往往难以满足需求,Java 多模块项目应运而生。IntelliJ IDEA 作为一款强大的集成开发环境(IDE),为 Java 多模块项目的开发提供了丰富的功能和便捷的操作。本文的目的在于深入介绍如何使用 IntelliJ IDEA 进行 Java 多模块项目的开发,涵盖了从项目的创建、配置到实际开发过程中的各种操作和技巧。

AI开发架构师 1206

IntelliJ IDEA配置Maven详解

1.下载Maven 官方地址:http://maven.apache.org/download.cgi 目前最新版是 apache-maven-3.8.3 版本,我当时使用的是 apache-maven-3.5.2 版本,大家也可以下载最新版本。 Apache-maven-3.5.2 下载地址:http://archive.apache.org/dist/maven/maven-3/ 下载后的版本如下: 解压并新建一个本地仓库文件夹: 2.配置本地仓库路径 在 MAVE_HOME/conf/setti

闲时不练功,忙时一场空 2万+

IntelliJ IDEA创建Maven多模块项目

我想Maven多模块项目应该都不陌生了,特别是在分布式的项目中,往往会有很多的工程,如果不创建多模块的话往往项目会显得很臃肿,不方便查找等等。 之前一直使用的是Eclipse创建的多模块项目,今天记录一下IDEA创建多模块的过程。 —————————————————————————————————————————————————————— 创建parent项目 1、打开IDEA,选择Create ...

zhoukun1314的博客 644

IntelliJ IDEA中基于Maven的多模块SpringBoot项目打包简易教程

IntelliJ IDEA中SpringBoot项目打包简易教程前言springboot项目打jar包过程 前言 在项目开发完毕后就是打包部署环节了。java项目打包可以根据类型不同分为jar、war、ear jar,一般可以把类库、可执行程序、站点打包为jar。类库不具备可执行行,一般作为其他项目的依赖包使用,比如通用工具类可以单独打一个jar包。可执行程序中一般会在某个主类中包含程序入口方法,就是main方法,以前的带界面的java swing项目最终打包发布的jar都具有可执行行,一般双击jar文件

分享技术,传播知识! 3152

《Maven实战》读书笔记--(1)使用intellij idea搭建并配置maven多模块项目

本文使用intellij idea搭建Maven3多模块项目,并进行配置相关配置,以实现项目的构建打包。 项目结构 multi-module-project是我们的项目名称,其中包含多个模块: mmp-dal模块:数据访问层,提供对原始数据(主要指数据库)的操作 mmp-integration模块:提供对第三方服务的调用 mmp-commons模块:提供工具类、常量定义等公共服务 ...

SigalHu 1364

菜鸟学习IntelliJ IDEA之Maven工程多模块继承和聚合创建(详解)

一、前言 IntelliJ IDEA开发环境搭建:具体参考《IntelliJ IDEA教程之如何配置Maven》 Maven环境搭建:具体参考《Windows下Maven安装以及配置》 主要模拟企业开发是如何搭建Maven工程的,以Spring+SpringMVC+MyBatis为框架搭建,搭建环境Windows8系统,使用IntelliJ IDEA搭建Maven工程或者项目。 二、步骤 ...

Java小蚂蚁 3837

使用IntelliJ IDEA创建Maven多模块项目

使用Maven管理项目时,往往需要创建多个模块,模块之间存在相互引用的关系。对于Maven的依赖,也需要专门创建一个模块来管理依赖项。例如对于一个项目,可以创建一个common模块来管理POJO类,创建一个server来管理业务逻辑及数据库操作类,创建一个web模块来组织Web文件,如HTML,JSP等。下图是一个Maven多模块管理的案例项目结构:

sunp823的专栏 2万+

IntelliJ IDEA中Maven多模块项目结构错乱的诊断与修复指南

本文详细解析了IntelliJ IDEA中Maven多模块项目结构错乱的常见问题及修复方法。从识别Root模块异常、诊断POM配置缺陷到分步修复方案,提供全面的解决指南,帮助开发者高效管理复杂项目结构,确保依赖关系正确解析。

weixin_33694172的博客 367

在 IntelliJ IDEA 中创建基本的 Maven 多模块项目

在 IntelliJ IDEA 中创建基本的 Maven 多模块项目   创建 Maven 的多模块项目的好处有很多,比方说,可以非侵入式地使用其它工程中的模块、隔离同一个包中不同的类等。这里假设要创建的多模块项目不是 Web 项目,而是普通的 Java 项目。这里要创建的是一个 MVC 多模块项目,方法如下。 创建一个 Maven 项目,这个项目将作为多模块中的父模块。 创建好之后,应该可以看下如下的 pom 文件。 创建子模块。注意,在创建子模块时要选择父模块,同时正确指定子模块的路

暗诺星刻的博客 2260

使用idea搭建maven多模块工程

使用idea搭建maven多模块工程一、简介二、搭建一个多模块工程1、idea创建maven工程2、创建子级模块3、多模块间设置依赖、调用关系4、 几个注意事项:1、项目中所有的groupId要一样2、packaging标签配置有讲究5、文件展示1、 introduction的pom.xml文件展示2、 food的pom.xml文件展示3、 population的pom.xml文件展示4、 region的pom.xml文件展示5、 season的pom.xml文件展示6、 west的pom.xml文件展示7

wysghmbb的博客 1066

IDEA里Maven多模块项目显示多个Root?别慌,三步搞定项目结构混乱

本文详细解析了IntelliJ IDEA中Maven多模块项目出现多个Root模块的问题,提供了从POM文件配置检查到IDEA缓存清理的系统化解决方案。通过三步操作(配置验证、缓存重载和手动修正),帮助开发者快速恢复清晰的项目结构,避免依赖解析错误和构建失败。

weixin_30896511的博客 442

idea创建maven多模块项目

idea创建maven多模块项目一、创建没有关系的多模块二、创建有依赖(“继承”)关系的多模块1.已创建好多模块2.未创建好多模块3.创建聚合工程三、问题1.[FATAL] Non-resolvable parent POM 一、创建没有关系的多模块 目的只为了简单方便,能像eclipse那样,同一个窗口能打开多个项目。废话不说,直接看图吧 同样的方法创建demo2 好了,想创建多少就继续傻瓜式循环创建了 二、创建有依赖(“继承”)关系的多模块 1.已创建好多模块 如果按照上面的方法已经创建

@素素~的博客 5788

摄像机实时接入分析平台视频分析网关AI智能分析智慧营业厅方案

通过智能化的改造,可以提高营业厅的运营效率,降低运营成本,同时提升客户体验和安全保障。

EasyDarwin开源社区技术博客 705

IntelliJ IDEA创建maven多模块项目

环境 IntelliJ IDEA 2019.1.3 (Ultimate Edition) java:1.8 maven:3.6.1 前言 平时的学习笔记、练习测试等之类的代码,我一般会创建两种项目: 一种普通的Java项目,本地跑个main就行了; 另一种是web项目;正常情况我会都上传到码云。 但是呢,比如换了一家公司,以前的代码是在码云上;但毕竟到了新公司,不想看以前的代码,习惯性又创建了一个...

山鬼谣的专栏 1703

RT-Thread与ROS2通信:micro-ROS在STM32上的移植实践

本文详细介绍了在STM32平台上使用RT-Thread实时操作系统移植micro-ROS实现与ROS2通信的实践方案。通过对比rosserial方案,重点阐述了micro-ROS基于XRCE-DDS协议栈在数据可靠性(丢包率低于1%)、双模式通信(UDP/串口)以及C/C++混合编程方面的优势,为嵌入式设备与ROS2的高效通信提供了完整解决方案。

emacs5lisp的博客 332

Xilinx XDMA IP核配置实战:AXI Memory Mapped vs Stream选型指南(附PCIe调试技巧)

本文深入解析Xilinx XDMA IP核配置中AXI Memory Mapped与AXI Stream两种DMA接口的核心区别与选型策略。针对PCIe高速数据传输场景,详细对比了二者在数据特性、延迟、硬件资源及软件复杂度上的差异,为FPGA工程师在数据采集、实时处理等项目中做出高效设计决策提供实战指南,并附有关键的PCIe调试技巧。

qsc901234的博客 585

IntelliJ IDEA 构建maven多模块项目

IntelliJ IDEA 构建maven多模块项目 我们在开发中 因为项目之间需要依赖 所以会在maven创建多个项目配置依赖,这种项目结构主要应用在大型项目中,多人协作开发 1.创建一个项目 File ->NEW -> Projec 2.选择最下边的Empty Project 然后点击Next 3.输入项目名称点击Finish 4.点击Modules...

无恋-zx的博客 455

【YOLOv11改进- 主干网络】YOLOv11+RepViT: 从ViT的角度重新审视Mobile的CNN助力YOLOv11有效涨点;

本文给大家带来的改进内容是在YOLOv11中更换主干网络为RepViT,助力YOLOv11有效涨点,论文通过集成轻量级 ViT 的高效架构设计,逐步增强了标准轻量级 CNN(即 MobileNetV3)的移动友好性。这最终产生了一个新的纯轻量级 CNN 系列的主干网络。

qq_41304809的博客 788

intellij用maven来创建多模块项目

Maven 与 IntelliJ IDEA 的完美结合  http://www.cr173.com/html/7116_1.html   可以先看看这个帖子,用intellij来maven构建多模块工程还是有很多好处的。   IntelliJ IDEA借鉴的Maven的概念,不在采取Eclipse里Project的概念,一切都是Module。无论是否使用Maven,你的项目都是一个独立 

小新新的专栏 9893

Python 爬虫实战:科研数据库学术论文数据抓取

在科研工作中,学术论文是获取前沿知识和研究方法的重要资源。然而,手动从科研数据库中查找和整理论文信息往往耗时费力。幸运的是,Python 爬虫技术可以自动化这一过程,帮助我们高效地抓取和管理学术论文数据。本文将详细介绍如何使用 Python 爬虫技术抓取科研数据库中的学术论文数据,并进行全字段提取和文献管理,助力科研工作。

u014481728的博客 946

麒麟操作系统安装教程(保姆级)

本文介绍了如何在VM中安装麒麟操作系统,文章详细的介绍了麒麟操作系统按钻过步骤。

啊渊的专栏 1万+

idea导入多模块maven项目_IntelliJ IDEA 构建maven多模块工程项目

阅读本文约需要6分钟大家好,我是你们的导师,我每天都会在这里给大家分享一些干货内容(当然了,周末也要允许老师休息一下哈)。上次老师跟大家分享了Java Web前端到后台常用框架的知识,今天跟大家分享下IntelliJ IDEA 构建maven多模块工程项目的知识。1 食用前需知本文以a b c 三个模块为例来搭建项目,以达到通俗易懂的初衷模块a —– 基模块,就是人们常说的parent...

weixin_39880479的博客 1670

MIKE水动力笔记2_水动力基础理论知识

本文所讲内容是水动力基础理论知识,所参考的主要书籍是《水动力学和水质》(第二版,季振刚著,海洋出版社)。

晏长街的博客 1万+

Intellij IDEA 2016学习系列之(一)创建maven 多模块项目

第一步 创建一个csdn的project 添加自己的maven 创建一个空project 第二步 创建一个maven父工程统一管理jar 父工程csdn-parent只是管理jar选择quickstart 骨架 第三步 创建子模块 csdn-web 第四步 设置子模块的 部署路径 和 web资源路径 很重要 设置Deployment Descriptors Modules中没有We...

幸运的天才小驴的专栏 1万+

嵌入式SDIO 总线面试题及参考答案

SDIO 的 4 位总线模式是一种提高数据传输效率的工作模式。在传统的 1 位总线模式下,数据只能通过一根数据线(DAT0)进行传输,这限制了数据传输的带宽和速度。而在 4 位总线模式下,DAT0 - DAT3 这 4 根数据线同时用于数据传输,相当于在同一时间内可以传输 4 倍于 1 位模式的数据量,从而显著提高了数据传输的带宽和速度。要通过 CMD6 命令将 SDIO 总线从当前模式切换到 4 位总线模式,需要遵循以下步骤:第一步,主设备需要确保 SDIO 卡支持 4 位总线模式。

大模型大数据攻城狮的专栏 1719

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

上一篇: 【Spring Boot项目结构黄金标准】:20年架构师亲授5大不可违背的模块划分铁律
下一篇: 软考中项30天极限通关计划(含每日学习量、错题重练节点与模考阈值预警)
FastProceed
博客等级 码龄1年 143粉丝 2005原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值