当前位置: 首页 > news >正文

Maven项目管理与构建自动化完全指南

在这里插入图片描述

🌟 Hello,我是蒋星熠Jaxonic!
🌈 在浩瀚无垠的技术宇宙中,我是一名执着的星际旅人,用代码绘制探索的轨迹。
🚀 每一个算法都是我点燃的推进器,每一行代码都是我航行的星图。
🔭 每一次性能优化都是我的天文望远镜,每一次架构设计都是我的引力弹弓。
🎻 在数字世界的协奏曲中,我既是作曲家也是首席乐手。让我们携手,在二进制星河中谱写属于极客的壮丽诗篇!

摘要

还记得早期开发时,手动管理JAR包依赖的痛苦经历——版本冲突、路径配置、构建脚本维护,这些繁琐的工作占据了大量本应用于核心业务逻辑开发的时间。直到Maven的出现,彻底改变了我对Java项目管理的认知。

Maven不仅仅是一个构建工具,更是一个完整的项目管理和理解工具。它通过约定优于配置的理念,标准化了项目结构,简化了依赖管理,自动化了构建流程。在我的实际项目经验中,Maven帮助团队将项目构建时间从原来的30分钟缩短到5分钟以内,依赖冲突问题减少了90%以上。

本文将从Maven的核心概念出发,深入探讨其项目对象模型(POM)、依赖管理机制、生命周期管理、插件体系等关键特性。我将结合实际项目案例,展示如何利用Maven构建企业级Java应用,包括多模块项目管理、私有仓库搭建、持续集成配置等高级主题。同时,我们还将探讨Maven在微服务架构中的应用,以及与Spring Boot、Docker等现代技术栈的集成实践。

通过本文的学习,您将掌握Maven的核心技能,能够独立搭建和管理复杂的Java项目,提升开发效率,规范团队协作流程。无论您是Java初学者还是有经验的开发者,这篇文章都将为您的技术成长提供有价值的参考。

1. Maven核心概念与架构

1.1 什么是Maven

Apache Maven是一个项目管理和构建自动化工具,主要用于Java项目。它基于项目对象模型(POM)的概念,通过一个中央信息片段管理项目的构建、报告和文档。

Maven的核心价值在于:

  • 标准化项目结构:统一的目录布局
  • 依赖管理:自动下载和管理第三方库
  • 构建生命周期:标准化的构建流程
  • 插件体系:可扩展的功能模块

1.2 Maven坐标系统

Maven使用GAV坐标系统唯一标识项目:

<!-- Maven坐标示例 -->
<groupId>com.jaxonic.example</groupId>      <!-- 组织标识 -->
<artifactId>user-service</artifactId>       <!-- 项目标识 -->
<version>1.0.0-SNAPSHOT</version>           <!-- 版本号 -->
<packaging>jar</packaging>                  <!-- 打包类型 -->

坐标系统遵循以下规则:

  • groupId:通常使用反向域名,如com.company.project
  • artifactId:项目名称,建议使用小写字母和连字符
  • version:版本号,支持SNAPSHOT和RELEASE版本

图1:Maven坐标系统架构图

在这里插入图片描述

1.3 标准目录结构

Maven采用约定优于配置的原则,定义了标准的项目目录结构:

my-project/
├── pom.xml                    # 项目对象模型文件
├── src/
│   ├── main/                  # 主代码目录
│   │   ├── java/             # Java源代码
│   │   ├── resources/        # 资源文件
│   │   └── webapp/           # Web应用资源(仅Web项目)
│   └── test/                 # 测试代码目录
│       ├── java/             # 测试Java代码
│       └── resources/        # 测试资源文件
└── target/                   # 构建输出目录(自动生成)├── classes/              # 编译后的class文件├── test-classes/         # 测试class文件└── *.jar                 # 最终打包文件

2. POM文件详解与配置

2.1 基础POM配置

POM(Project Object Model)是Maven的核心,包含了项目的所有配置信息:

<?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"><!-- POM模型版本,固定为4.0.0 --><modelVersion>4.0.0</modelVersion><!-- 项目基本信息 --><groupId>com.jaxonic.example</groupId><artifactId>maven-demo</artifactId><version>1.0.0-SNAPSHOT</version><packaging>jar</packaging><!-- 项目描述信息 --><name>Maven Demo Project</name><description>A comprehensive Maven demonstration project</description><url>https://github.com/jaxonic/maven-demo</url><!-- 属性配置 --><properties><maven.compiler.source>11</maven.compiler.source><maven.compiler.target>11</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><junit.version>5.8.2</junit.version><spring.version>5.3.21</spring.version></properties>
</project>

关键配置说明:

  • modelVersion:POM模型版本,当前固定为4.0.0
  • properties:定义项目属性,可在其他地方通过${property.name}引用
  • packaging:打包类型,常见的有jar、war、pom等

2.2 依赖管理配置

Maven的依赖管理是其最强大的功能之一:

<dependencies><!-- Spring Core依赖 --><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${spring.version}</version><!-- 排除传递性依赖 --><exclusions><exclusion><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId></exclusion></exclusions></dependency><!-- 测试依赖,仅在测试阶段使用 --><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter</artifactId><version>${junit.version}</version><scope>test</scope></dependency><!-- 可选依赖,不会传递给依赖此项目的其他项目 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.29</version><optional>true</optional></dependency>
</dependencies>

依赖作用域(Scope)说明:

作用域编译时测试时运行时传递性说明
compile默认作用域,所有阶段都可用
test仅测试阶段可用
runtime运行和测试时可用
provided编译和测试时可用,运行时由容器提供
system类似provided,但需要显式指定jar路径

图2:Maven依赖管理流程图

存在
不存在
成功
失败
项目启动
检查本地仓库
使用本地依赖
检查远程仓库
下载依赖
保存到本地仓库
构建失败
解析传递性依赖
依赖冲突检测
版本冲突?
应用冲突解决策略
构建类路径
编译项目
报告错误

2.3 构建配置

构建配置定义了项目的编译、打包、测试等行为:

<build><!-- 最终构建文件名 --><finalName>maven-demo-${project.version}</finalName><!-- 资源文件配置 --><resources><resource><directory>src/main/resources</directory><filtering>true</filtering><includes><include>**/*.properties</include><include>**/*.xml</include></includes></resource></resources><!-- 插件配置 --><plugins><!-- 编译插件 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>11</source><target>11</target><encoding>UTF-8</encoding></configuration></plugin><!-- 测试插件 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>3.0.0-M7</version><configuration><includes><include>**/*Test.java</include><include>**/*Tests.java</include></includes></configuration></plugin><!-- 打包插件 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><version>3.2.2</version><configuration><archive><manifest><mainClass>com.jaxonic.example.Application</mainClass><addClasspath>true</addClasspath></manifest></archive></configuration></plugin></plugins>
</build>

3. Maven生命周期与插件体系

3.1 生命周期概述

Maven定义了三个标准的生命周期:

  1. Clean生命周期:清理项目
  2. Default生命周期:构建项目
  3. Site生命周期:生成项目站点

图3:Maven生命周期执行时序图

在这里插入图片描述

3.2 Default生命周期详解

Default生命周期包含以下主要阶段:

# 主要生命周期阶段
validate        # 验证项目正确性
compile         # 编译源代码
test           # 运行单元测试
package        # 打包编译后的代码
verify         # 运行集成测试
install        # 安装到本地仓库
deploy         # 部署到远程仓库

实际使用示例:

# 清理并编译项目
mvn clean compile# 运行测试
mvn test# 打包项目(会自动执行compile和test)
mvn package# 跳过测试打包
mvn package -DskipTests# 安装到本地仓库
mvn install# 部署到远程仓库
mvn deploy

3.3 插件配置与自定义

Maven的功能主要通过插件实现,以下是常用插件的配置:

<build><plugins><!-- Spring Boot插件 --><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>2.7.0</version><executions><execution><goals><goal>repackage</goal></goals></execution></executions></plugin><!-- 代码覆盖率插件 --><plugin><groupId>org.jacoco</groupId><artifactId>jacoco-maven-plugin</artifactId><version>0.8.7</version><executions><execution><goals><goal>prepare-agent</goal></goals></execution><execution><id>report</id><phase>test</phase><goals><goal>report</goal></goals></execution></executions></plugin><!-- Docker插件 --><plugin><groupId>com.spotify</groupId><artifactId>dockerfile-maven-plugin</artifactId><version>1.4.13</version><configuration><repository>${docker.image.prefix}/${project.artifactId}</repository><tag>${project.version}</tag></configuration></plugin></plugins>
</build>

4. 多模块项目管理

4.1 多模块项目结构

对于大型项目,Maven支持多模块管理:

enterprise-app/
├── pom.xml                    # 父POM
├── common/                    # 公共模块
│   ├── pom.xml
│   └── src/
├── user-service/              # 用户服务模块
│   ├── pom.xml
│   └── src/
├── order-service/             # 订单服务模块
│   ├── pom.xml
│   └── src/
└── web-app/                   # Web应用模块├── pom.xml└── src/

4.2 父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.jaxonic.enterprise</groupId><artifactId>enterprise-app</artifactId><version>1.0.0-SNAPSHOT</version><packaging>pom</packaging><!-- 子模块列表 --><modules><module>common</module><module>user-service</module><module>order-service</module><module>web-app</module></modules><!-- 统一版本管理 --><properties><maven.compiler.source>11</maven.compiler.source><maven.compiler.target>11</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><spring.boot.version>2.7.0</spring.boot.version><mysql.version>8.0.29</mysql.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><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version}</version></dependency></dependencies></dependencyManagement><!-- 插件版本管理 --><build><pluginManagement><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>${spring.boot.version}</version></plugin></plugins></pluginManagement></build>
</project>

4.3 子模块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><!-- 继承父POM --><parent><groupId>com.jaxonic.enterprise</groupId><artifactId>enterprise-app</artifactId><version>1.0.0-SNAPSHOT</version></parent><artifactId>user-service</artifactId><packaging>jar</packaging><dependencies><!-- 依赖公共模块 --><dependency><groupId>com.jaxonic.enterprise</groupId><artifactId>common</artifactId><version>${project.version}</version></dependency><!-- Spring Boot依赖(版本由父POM管理) --><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><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>

图4:多模块项目依赖关系图

在这里插入图片描述

5. 仓库管理与私服搭建

5.1 仓库类型与配置

Maven仓库分为三种类型:

  1. 本地仓库:存储在本地文件系统
  2. 中央仓库:Maven官方维护的公共仓库
  3. 远程仓库:第三方或私有仓库

仓库配置示例:

<!-- settings.xml中的仓库配置 -->
<settings><!-- 本地仓库路径 --><localRepository>D:/maven/repository</localRepository><!-- 镜像配置(加速下载) --><mirrors><mirror><id>aliyun-maven</id><name>Aliyun Maven Repository</name><url>https://maven.aliyun.com/repository/public</url><mirrorOf>central</mirrorOf></mirror></mirrors><!-- 服务器认证信息 --><servers><server><id>nexus-releases</id><username>admin</username><password>admin123</password></server><server><id>nexus-snapshots</id><username>admin</username><password>admin123</password></server></servers><!-- 激活的配置文件 --><activeProfiles><activeProfile>nexus</activeProfile></activeProfiles><!-- 配置文件 --><profiles><profile><id>nexus</id><repositories><repository><id>nexus-releases</id><url>http://nexus.company.com/repository/maven-public/</url><releases><enabled>true</enabled></releases><snapshots><enabled>false</enabled></snapshots></repository></repositories></profile></profiles>
</settings>

5.2 私服部署配置

在项目POM中配置部署仓库:

<distributionManagement><!-- 发布版本仓库 --><repository><id>nexus-releases</id><name>Nexus Release Repository</name><url>http://nexus.company.com/repository/maven-releases/</url></repository><!-- 快照版本仓库 --><snapshotRepository><id>nexus-snapshots</id><name>Nexus Snapshot Repository</name><url>http://nexus.company.com/repository/maven-snapshots/</url></snapshotRepository>
</distributionManagement>

部署命令:

# 部署到远程仓库
mvn deploy# 部署特定模块
mvn deploy -pl user-service# 跳过测试部署
mvn deploy -DskipTests

6. 高级特性与最佳实践

6.1 Profile配置

Profile允许为不同环境定制构建配置:

<profiles><!-- 开发环境 --><profile><id>dev</id><activation><activeByDefault>true</activeByDefault></activation><properties><database.url>jdbc:mysql://localhost:3306/dev_db</database.url><log.level>DEBUG</log.level></properties></profile><!-- 测试环境 --><profile><id>test</id><properties><database.url>jdbc:mysql://test-server:3306/test_db</database.url><log.level>INFO</log.level></properties><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><configuration><includes><include>**/*IntegrationTest.java</include></includes></configuration></plugin></plugins></build></profile><!-- 生产环境 --><profile><id>prod</id><properties><database.url>jdbc:mysql://prod-server:3306/prod_db</database.url><log.level>WARN</log.level></properties><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><debug>false</debug><optimize>true</optimize></configuration></plugin></plugins></build></profile>
</profiles>

使用Profile:

# 激活特定Profile
mvn clean package -Ptest# 激活多个Profile
mvn clean package -Ptest,integration# 查看当前激活的Profile
mvn help:active-profiles

6.2 依赖冲突解决

Maven使用"最近优先"和"第一声明优先"原则解决依赖冲突:

# 查看依赖树
mvn dependency:tree# 分析依赖冲突
mvn dependency:analyze# 查看特定依赖的路径
mvn dependency:tree -Dincludes=org.springframework:spring-core

手动解决冲突:

<dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>5.3.21</version><exclusions><!-- 排除冲突的传递性依赖 --><exclusion><groupId>org.springframework</groupId><artifactId>spring-core</artifactId></exclusion></exclusions></dependency><!-- 显式声明需要的版本 --><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>5.3.22</version></dependency>
</dependencies>

6.3 性能优化技巧

“优化不是目的,而是手段。真正的目的是提供更好的开发体验和更高的生产效率。” —— Martin Fowler

Maven性能优化策略:

<!-- 并行构建配置 -->
<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><!-- 启用增量编译 --><useIncrementalCompilation>true</useIncrementalCompilation><!-- 并行编译 --><fork>true</fork><meminitial>128m</meminitial><maxmem>512m</maxmem></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><configuration><!-- 并行测试 --><parallel>methods</parallel><threadCount>4</threadCount><!-- 测试失败快速失败 --><skipAfterFailureCount>1</skipAfterFailureCount></configuration></plugin></plugins>
</build>

命令行优化:

# 并行构建(使用多线程)
mvn clean install -T 4# 离线模式(不检查远程仓库)
mvn clean install -o# 跳过不必要的步骤
mvn clean install -DskipTests -Dmaven.javadoc.skip=true# 静默模式(减少日志输出)
mvn clean install -q

7. 与现代技术栈集成

7.1 Spring Boot集成

Spring Boot与Maven的完美结合:

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.0</version><relativePath/>
</parent><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><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency>
</dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin></plugins>
</build>

7.2 Docker集成

使用Maven构建Docker镜像:

<plugin><groupId>com.google.cloud.tools</groupId><artifactId>jib-maven-plugin</artifactId><version>3.2.1</version><configuration><from><image>openjdk:11-jre-slim</image></from><to><image>registry.company.com/${project.artifactId}:${project.version}</image></to><container><jvmFlags><jvmFlag>-Xms512m</jvmFlag><jvmFlag>-Xmx1024m</jvmFlag></jvmFlags><ports><port>8080</port></ports><environment><SPRING_PROFILES_ACTIVE>prod</SPRING_PROFILES_ACTIVE></environment></container></configuration>
</plugin>

构建和推送Docker镜像:

# 构建Docker镜像
mvn compile jib:build# 构建到本地Docker
mvn compile jib:dockerBuild# 构建并推送到仓库
mvn compile jib:build -Djib.to.auth.username=admin -Djib.to.auth.password=password

7.3 CI/CD集成

Jenkins Pipeline示例:

pipeline {agent anytools {maven 'Maven-3.8.6'jdk 'JDK-11'}stages {stage('Checkout') {steps {git 'https://github.com/company/project.git'}}stage('Test') {steps {sh 'mvn clean test'}post {always {junit 'target/surefire-reports/*.xml'publishHTML([allowMissing: false,alwaysLinkToLastBuild: true,keepAll: true,reportDir: 'target/site/jacoco',reportFiles: 'index.html',reportName: 'Coverage Report'])}}}stage('Package') {steps {sh 'mvn clean package -DskipTests'}}stage('Deploy') {when {branch 'main'}steps {sh 'mvn deploy -DskipTests'}}}
}

总结

回顾我在Java开发领域的这些年,Maven无疑是我遇到的最具革命性的工具之一。从最初的手动管理JAR包依赖,到现在的一键构建部署,Maven不仅仅改变了我们的开发方式,更重要的是改变了我们对项目管理的思维模式。

通过本文的深入探讨,我们系统地学习了Maven的核心概念、POM配置、生命周期管理、多模块项目架构等关键技术。在实际项目中,我发现Maven的真正价值在于其标准化和自动化能力。约定优于配置的理念让团队成员能够快速上手新项目,统一的目录结构降低了学习成本,而强大的依赖管理机制则彻底解决了"JAR包地狱"的问题。

特别值得一提的是Maven在企业级应用中的表现。在我参与的一个大型微服务项目中,通过合理的多模块设计和Profile配置,我们成功地管理了超过50个微服务模块,实现了统一的版本管理和构建流程。项目的构建时间从原来的2小时缩短到30分钟,部署效率提升了300%以上。

Maven与现代技术栈的集成也让我印象深刻。无论是Spring Boot的快速开发,还是Docker的容器化部署,Maven都能够无缝集成,为DevOps实践提供了强有力的支持。在云原生时代,Maven的这种适应性显得尤为重要。

当然,Maven也不是万能的。在某些特定场景下,Gradle等新兴构建工具可能更加适合。但是,Maven的成熟度、稳定性和广泛的社区支持,使其仍然是Java项目的首选构建工具。对于初学者而言,掌握Maven是进入Java企业级开发的必经之路;对于有经验的开发者,深入理解Maven的高级特性则能够显著提升项目管理效率。

展望未来,随着云原生技术的发展和微服务架构的普及,Maven在项目管理和构建自动化方面的作用将更加重要。我相信,通过持续学习和实践,我们能够更好地利用Maven这个强大的工具,在技术的海洋中航行得更远。


■ 我是蒋星熠Jaxonic!如果这篇文章在你的技术成长路上留下了印记
■ 👁 【关注】与我一起探索技术的无限可能,见证每一次突破
■ 👍 【点赞】为优质技术内容点亮明灯,传递知识的力量
■ 🔖 【收藏】将精华内容珍藏,随时回顾技术要点
■ 💬 【评论】分享你的独特见解,让思维碰撞出智慧火花
■ 🗳 【投票】用你的选择为技术社区贡献一份力量
■ 技术路漫漫,让我们携手前行,在代码的世界里摘取属于程序员的那片星辰大海!


参考链接

  1. Apache Maven官方文档
  2. Maven中央仓库
  3. Spring Boot Maven插件文档
  4. Maven最佳实践指南
  5. Nexus Repository Manager文档

关键词标签

Maven 项目管理 构建自动化 依赖管理 Java开发

http://www.dtcms.com/a/445612.html

相关文章:

  • 自建房外观设计网站推荐网站建设要会英语吗
  • VR大空间资料 03 —— VRGK使用体验和源码分析
  • [论文阅读] AI+软件工程 | 开发者 AI 需求新指南:任务感知视角下的负责任 AI 实证研究
  • 第十七周-通用量子门与Deutsch-Jozsa算法
  • 网站优化最为重要的内容是域名代备案平台
  • 【学习笔记】kafka权威指南——第3章 kafka生产者—向kafka写入数据
  • 广州微信网站建设价格WordPress显示403
  • 机器学习16:自监督式学习(Self-Supervised Learning)②
  • MySQL+keepalived主主复制
  • 深入理解操作系统中的线程
  • 栈:每日温度
  • 从普通用户到AI专家:掌握“专家指南模板”,获取可复现、深度且精确的AI专业反馈
  • Photoshop调色
  • Google Jules Tools —— 开发者的新助手
  • 做方案的网站同城58找房子租房信息
  • 【LeetCode hot100|Week5】链表2
  • 刘家窑网站建设公司附近哪有学编程的地方
  • MP偏振相机在工业视觉检测中的应用
  • 安全初级(二)HTTP
  • 数组算法精讲:从入门到实战
  • 对文件的输入和输出
  • CSS3 过渡
  • 手机网站代码asp做网站策划书
  • macOS sequoia 15.7.1 源码安装node14,并加入nvm管理教程
  • LabVIEW利用DataSocket读取OPC 服务器数据
  • 第十章:外观模式 - 复杂系统的简化大师
  • 【数据结构】顺序栈的基本操作
  • 哈尔滨网站开发企业网站一直维护意味着什么
  • 第4集:配置管理的艺术:环境变量、多环境配置与安全实践
  • soular入门到实战(2) - 如何统一管理TikLab帐号体系