创建项目的步骤

可以直接用springboot项目来创建:因为会生成一些所需的文件。不需要的文件可以删除。
创建后的效果

创建过程
- 1、先创建health_parent父工程,package指定为pom
- 2、配置maven工程路径

- 3、配置项目的 jdk版本



- 4、创建其他子模块工程
maven
定义
maven 是一个强大的项目管理和构建自动化工具(插件),广泛用于 java 项目的构建、依赖管理和项目报告。
maven 工程有约定的目录结构,约定的目录结构对于 maven 实现自动化构建而言是必不可少的一环,就拿自动编译来说,maven 必须 能找到 java 源文件,下一步才能编译,而编译之后也必须有一个准确的位置保持编译得到的字节码文件。

用途
以下是 maven 的一些主要用途:
项目构建(自动化构建)
maven 提供了标准的构建生命周期,包括编译、测试、打包、部署等。
这些生命周期都提供相应的插件。
依赖管理(依赖范围、依赖传递)
- 依赖管理:自动下载和管理项目所需的第三方库(依赖)
- 依赖范围:maven 支持定义依赖的范围(如 compile、test、provided 等),从而控制依赖在不同构建阶段的使用。
- 依赖传递:maven 支持依赖的传递性,即如果项目 a 依赖于项目 b,项目 b 依赖于项目 c,那么项目 a 也会自动依赖于项目 c。
项目管理(支持多模块)
maven 支持多模块项目,通过父 pom 和子模块的结构,可以方便地管理大型项目的各个子模块。
发布管理(打好的包发布)
发布到仓库:maven 可以将构建好的包发布到本地或远程 maven 仓库,方便其他项目引用。
发布插件:maven 提供了发布插件,可以自动化发布过程,例如生成发布版本、发布到 maven 中央仓库等。
继承(pom)和聚合(module)
继承:子工程可以用到父工程的东西。
在父工程中统一管理项目中的依赖信息,具体来说是管理依赖信息的版本。
父工程创建好之后,要修改它的打包方式:
<!-- 当前工程作为父工程,它要去管理子工程,所以打包方式必须是 pom --> <packaging>pom</packaging>
只有打包方式为 pom 的 maven 工程能够管理其他 maven 工程。打包方式为 pom 的 maven 工程中不写业务代码,它是专门管理其他 maven 工程的工程,所以可以将生成的 src 目录删除。
聚合:使用一个总工程将各个模块工程汇集起来,作为一个整体对应完整的项目,实际就是 module 标签。
什么是pom.xml
pom.xml是maven项目的核心配置文件,它是 项目对象模型 - project object model(pom)的缩写。
它使用 xml 格式定义了项目的基本信息、依赖项、构建插件和任务等。使用pom.xml,我们可以轻松地管理项目的构建和依赖关系,让我们能够更专注于业务逻辑的开发。
pom.xml文件结构
pom.xml 文件通常的结构如下所示,主要用于定义 maven 项目的配置信息和构建过程中所需的各种依赖和插件:
<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>...</groupid>
<artifactid>...</artifactid>
<version>...</version>
<packaging>...</packaging>
<!-- 项目依赖 -->
<dependencies>
<dependency>
<groupid>...</groupid>
<artifactid>...</artifactid>
<version>...</version>
<scope>...</scope>
</dependency>
<!-- 可以有多个依赖项 -->
</dependencies>
<!-- 构建配置 -->
<build>
<sourcedirectory>src/main/java</sourcedirectory>
<testsourcedirectory>src/test/java</testsourcedirectory>
<plugins>
<plugin>
<groupid>...</groupid>
<artifactid>...</artifactid>
<version>...</version>
<!-- 插件配置 -->
</plugin>
<!-- 可以有多个插件 -->
</plugins>
</build>
<!-- 仓库配置 -->
<repositories>
<repository>
<id>...</id>
<url>...</url>
</repository>
<!-- 可以有多个仓库 -->
</repositories>
</project>详细解释:
<modelversion>:目前是 4.0.0。( pom 模型的版本)<groupid>: 项目组织或公司的唯一标识符。(可以自定义com.xxx)<artifactid>: 项目的唯一标识符,(通常是项目名称)<version>: 项目的当前版本号。<scope>:指定依赖项在项目中的使用范围。<packaging>: 例如 jar、war 等。(项目的打包方式)<dependencies>: 项目依赖的外部库或模块。
<dependency>
<groupid>com.sky</groupid>
<artifactid>sky-common</artifactid>
<version>1.0-snapshot</version>
</dependency><build>: maven 构建过程的配置信息,包括源码目录、测试目录和插件配置。<plugins>: 在构建过程中使用的 maven 插件。
<plugin>
<groupid>org.springframework.boot</groupid>
<artifactid>spring-boot-maven-plugin</artifactid>
</plugin><repositories>: maven 从中获取依赖项和插件的仓库列表。
dependency
与项目的依赖列表相关的标签最外层由 <dependencies>来囊括,内部包含了各种具体的依赖
- <dependency>,该标签用于指定一个依赖项,它包含以下几个子标签
- <groupid>:指定依赖项的groupid,项目的组名
- <artifactid>:指定依赖项的artifactid,项目的唯一标识符
- <version>:指定依赖项的版本号。
- <scope>:指定依赖项在项目中的使用范围。
其中的 <scope>一般包含以下几种范围:常用的有compile、test、provided 和 runtime
- compile:依赖库默认的 scope,表示该依赖库在编译、测试、运行时均需要使用。
- provided:表示该依赖库只在编译和测试时需要使用,而在运行时已经被系统或者容器提供,所以不需要打包到最终的应用程序中。
- runtime:表示该依赖库只在运行时需要使用,而在编译和测试时则不需要。
- test:表示该依赖库只在测试时需要使用,而在编译和运行时则不需要。
repository
当然,我们还能在pom文件中支持指定maven仓库,即使用 <repositories> 和 <repository>标签,
<repository>用于指定一个maven仓库,它包含以下几个子标签:
- <id>:指定maven仓库的id。
- <name>:指定maven仓库的名称。
- <url>:指定maven仓库的url
properties
properties 严格来说,并不一定是项目本身的信息,而是人为设置的属性或者说宏,这个标签用来定义和管理项目中所需要的属性,其作用有以下几个:
- 统一管理项目中的常用属性,比如版本号、路径、插件版本等,方便统一修改和管理。
- 可以在配置过程中使用 ${…}占位符引用这些属性,使得配置更加灵活和便捷。
- 避免硬编码,提高代码的可维护性和可读性
比如说我们可以这么配
<properties>
<project.name>demo-project</project.name>
<project.version>1.0.0</project.version>
<jdk.version>1.8</jdk.version>
</properties>
....省略其余部分
<dependency>
<groupid>com.example.demo</groupid>
<artifactid>${project.name}-api</artifactid>
<version>${project.version}</version>
</dependency>parent
在 maven 的 pom.xml 文件中,<parent> 元素是用来指定当前项目继承的父项目(parent project)的配置信息。这种配置方式被称为 “继承” 或者 “继承机制”,允许子项目继承父项目的配置,从而简化项目的管理和维护。
<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.myproject</groupid>
<artifactid>myproject-core</artifactid>
<version>1.0.0-snapshot</version>
<packaging>jar</packaging>
<!-- 继承自父项目 -->
<parent>
<groupid>com.example</groupid>
<artifactid>parent-project</artifactid>
<version>1.0.0</version>
</parent>
<!-- 其他配置 -->
<dependencies>
<!-- 项目依赖 -->
</dependencies>
<build>
<!-- 构建配置 -->
</build>
<repositories>
<!-- 仓库配置 -->
</repositories>
</project>在这个例子中:
<parent>元素中的<groupid>、<artifactid>和<version>指定了父项目的坐标信息。- 当前项目(
myproject-core)继承自parent-project,因此会继承父项目中定义的基本配置,如版本管理、插件管理等。 - 在
<dependencies>、<build>和<repositories>等部分,可以定义当前项目自己的特定配置,这些配置会与父项目的配置合并或覆盖,以形成最终的项目配置。
通过使用 <parent> 元素,可以避免在子项目中重复定义相同的配置信息,提高项目的一致性和可维护性。
父工程的作用
以下是父工程的 pom.xml 文件的主要作用:
继承与共享配置
- 继承属性:子模块通过
<parent>标签指定父 pom,从而继承父 pom 中的所有属性、依赖、插件配置等。 - 共享配置:父 pom 可以定义一些公共的配置,例如编译插件的版本、资源过滤规则等。这样,所有子模块都可以共享这些配置,减少了重复代码,提高了维护性。
统一管理依赖
- 依赖版本管理:父 pom 文件通常会定义项目所使用的依赖库的版本号。子模块可以直接引用这些依赖,而不需要显式指定版本号。这样可以确保整个项目使用一致的依赖版本,避免版本冲突。
- 依赖管理:通过
<dependencymanagement>标签,父 pom 可以集中管理所有子模块的依赖。这意味着子模块只需要声明依赖的坐标(groupid 和 artifactid),而不需要指定版本。版本由父 pom 统一管理。
项目模块化和简化维护
- 模块声明:父 pom 文件中可以声明项目的各个子模块。通过
<modules>标签,父 pom 可以定义哪些子模块属于当前项目,这样 maven 就可以在构建时按照模块依赖关系进行构建。 - 集中管理:通过父 pom,项目的核心配置集中在父 pom 文件中,减少了子模块的配置复杂度。如果需要修改全局配置,只需修改父 pom 文件即可。
注意事项:拿到初始化代码可以通过编译父工程,查看子模块的代码是否能编译成功。如果能编译成功说明没问题,可以正常启动项目。
项目实际应用

父工程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">
<!-- pom 模型版本。 -->
<modelversion>4.0.0</modelversion>
<!-- <parent>: 定义了当前项目的父项目。这意味着当前项目是一个 spring boot 项目 -->
<parent>
<artifactid>spring-boot-starter-parent</artifactid>
<groupid>org.springframework.boot</groupid>
<version>2.7.3</version>
</parent>
<!-- 项目基本信息 -->
<groupid>com.sky</groupid>
<artifactid>sky-take-out</artifactid>
<packaging>pom</packaging>
<version>1.0-snapshot</version>
<!-- <modules>: 定义了当前项目的子模块。 -->
<modules>
<module>sky-common</module>
<module>sky-pojo</module>
<module>sky-server</module>
</modules>
<!-- <properties>: 定义了一些属性及其对应的值,这些属性可以在后续的配置中引用。 -->
<!-- 后续可以通过 ${mybatis.spring} 引用这个值。 -->
<properties>
<mybatis.spring>2.2.0</mybatis.spring>
<lombok>1.18.20</lombok>
<fastjson>1.2.76</fastjson>
<commons.lang>2.6</commons.lang>
<druid>1.2.1</druid>
<pagehelper>1.3.0</pagehelper>
<aliyun.sdk.oss>3.10.2</aliyun.sdk.oss>
<knife4j>3.0.2</knife4j>
<aspectj>1.9.4</aspectj>
<jjwt>0.9.1</jjwt>
<jaxb-api>2.3.1</jaxb-api>
<poi>3.16</poi>
</properties>
<!-- <dependencymanagement>: 定义了依赖管理的配置。这个部分不会直接引入依赖,而是声明了这些依赖的版本和作用范围。 -->
<!-- 子模块在引用这些依赖时,可以直接使用这些定义好的版本号,而不需要在每个子模块中单独指定。 -->
<dependencymanagement>
<dependencies>
<dependency>
<groupid>org.mybatis.spring.boot</groupid>
<artifactid>mybatis-spring-boot-starter</artifactid>
<version>${mybatis.spring}</version>
</dependency>
<dependency>
<groupid>org.projectlombok</groupid>
<artifactid>lombok</artifactid>
<version>${lombok}</version>
</dependency>
<dependency>
<groupid>com.alibaba</groupid>
<artifactid>fastjson</artifactid>
<version>${fastjson}</version>
</dependency>
<dependency>
<groupid>commons-lang</groupid>
<artifactid>commons-lang</artifactid>
<version>${commons.lang}</version>
</dependency>
<dependency>
<groupid>com.alibaba</groupid>
<artifactid>druid-spring-boot-starter</artifactid>
<version>${druid}</version>
</dependency>
<dependency>
<groupid>com.github.pagehelper</groupid>
<artifactid>pagehelper-spring-boot-starter</artifactid>
<version>${pagehelper}</version>
</dependency>
<dependency>
<groupid>com.github.xiaoymin</groupid>
<artifactid>knife4j-spring-boot-starter</artifactid>
<version>${knife4j}</version>
</dependency>
<dependency>
<groupid>org.aspectj</groupid>
<artifactid>aspectjrt</artifactid>
<version>${aspectj}</version>
</dependency>
<dependency>
<groupid>org.aspectj</groupid>
<artifactid>aspectjweaver</artifactid>
<version>${aspectj}</version>
</dependency>
<dependency>
<groupid>io.jsonwebtoken</groupid>
<artifactid>jjwt</artifactid>
<version>${jjwt}</version>
</dependency>
<dependency>
<groupid>com.aliyun.oss</groupid>
<artifactid>aliyun-sdk-oss</artifactid>
<version>${aliyun.sdk.oss}</version>
</dependency>
<dependency>
<groupid>javax.xml.bind</groupid>
<artifactid>jaxb-api</artifactid>
<version>${jaxb-api}</version>
</dependency>
<!-- poi -->
<dependency>
<groupid>org.apache.poi</groupid>
<artifactid>poi</artifactid>
<version>${poi}</version>
</dependency>
<dependency>
<groupid>org.apache.poi</groupid>
<artifactid>poi-ooxml</artifactid>
<version>${poi}</version>
</dependency>
<!--微信支付-->
<dependency>
<groupid>com.github.wechatpay-apiv3</groupid>
<artifactid>wechatpay-apache-httpclient</artifactid>
<version>0.4.8</version>
</dependency>
</dependencies>
</dependencymanagement>
</project>
子工程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">
<!-- parent 元素定义了当前 maven 项目的父项目。 -->
<parent>
<artifactid>sky-take-out</artifactid>
<groupid>com.sky</groupid>
<version>1.0-snapshot</version>
</parent>
<!-- 项目基本信息 -->
<modelversion>4.0.0</modelversion>
<artifactid>sky-server</artifactid>
<dependencies>
<!-- 引入sky-common模块 -->
<dependency>
<groupid>com.sky</groupid>
<artifactid>sky-common</artifactid>
<version>1.0-snapshot</version>
</dependency>
<!-- 引入sky-pojo模块 -->
<dependency>
<groupid>com.sky</groupid>
<artifactid>sky-pojo</artifactid>
<version>1.0-snapshot</version>
</dependency>
<!-- spring boot 的核心依赖,包含了 spring 框架、日志、自动配置等功能。 -->
<dependency>
<groupid>org.springframework.boot</groupid>
<artifactid>spring-boot-starter</artifactid>
</dependency>
<!-- spring boot 的测试依赖,用于编写单元测试和集成测试。 -->
<dependency>
<groupid>org.springframework.boot</groupid>
<artifactid>spring-boot-starter-test</artifactid>
<scope>test</scope>
</dependency>
<!-- spring boot 的 web 依赖,用于构建 web 应用,包含 tomcat 和 spring mvc。-->
<dependency>
<groupid>org.springframework.boot</groupid>
<artifactid>spring-boot-starter-web</artifactid>
<scope>compile</scope>
</dependency>
<!-- mysql 数据库驱动依赖,用于连接 mysql 数据库。-->
<dependency>
<groupid>mysql</groupid>
<artifactid>mysql-connector-java</artifactid>
<scope>runtime</scope>
</dependency>
<!-- mybatis 框架的 spring boot 启动器,用于简化 mybatis 的配置。-->
<dependency>
<groupid>org.mybatis.spring.boot</groupid>
<artifactid>mybatis-spring-boot-starter</artifactid>
</dependency>
<!-- lombok 库,通过注解消除 java 代码中的样板代码(如 getter、setter、构造函数等)。-->
<dependency>
<groupid>org.projectlombok</groupid>
<artifactid>lombok</artifactid>
</dependency>
<!-- fastjson 阿里巴巴的 json 库,用于 json 序列化和反序列化。 -->
<dependency>
<groupid>com.alibaba</groupid>
<artifactid>fastjson</artifactid>
</dependency>
<!-- 阿里巴巴的 druid 数据库连接池的 spring boot 启动器。 -->
<dependency>
<groupid>com.alibaba</groupid>
<artifactid>druid-spring-boot-starter</artifactid>
</dependency>
<!-- mybatis 的分页插件 pagehelper 的 spring boot 启动器。 -->
<dependency>
<groupid>com.github.pagehelper</groupid>
<artifactid>pagehelper-spring-boot-starter</artifactid>
</dependency>
<!-- aspectjrt 和 aspectjweaver:aspectj 运行时库,用于支持 aop(面向切面编程)。 -->
<dependency>
<groupid>org.aspectj</groupid>
<artifactid>aspectjrt</artifactid>
</dependency>
<dependency>
<groupid>org.aspectj</groupid>
<artifactid>aspectjweaver</artifactid>
</dependency>
<!-- knife4j 是一个基于 swagger 的增强 ui 库,用于生成 api 文档。 -->
<dependency>
<groupid>com.github.xiaoymin</groupid>
<artifactid>knife4j-spring-boot-starter</artifactid>
</dependency>
<!-- spring boot 的 redis 依赖,用于操作 redis 数据库。 -->
<dependency>
<groupid>org.springframework.boot</groupid>
<artifactid>spring-boot-starter-data-redis</artifactid>
</dependency>
<!-- spring-boot-starter-cache:spring boot 的缓存依赖,支持多种缓存机制。 -->
<dependency>
<groupid>org.springframework.boot</groupid>
<artifactid>spring-boot-starter-cache</artifactid>
</dependency>
<!-- spring boot 的 websocket 依赖,用于构建实时通信应用。 -->
<dependency>
<groupid>org.springframework.boot</groupid>
<artifactid>spring-boot-starter-websocket</artifactid>
</dependency>
<!-- jaxb-api:用于 java 对象与 xml 之间的转换。 -->
<dependency>
<groupid>javax.xml.bind</groupid>
<artifactid>jaxb-api</artifactid>
</dependency>
<!--poi 和 poi-ooxml:apache poi 库,用于操作 microsoft office 文档(如 excel)-->
<dependency>
<groupid>org.apache.poi</groupid>
<artifactid>poi</artifactid>
</dependency>
<dependency>
<groupid>org.apache.poi</groupid>
<artifactid>poi-ooxml</artifactid>
</dependency>
</dependencies>
<!-- build 元素定义了 maven 项目的构建配置。-->
<build>
<plugins>
<!-- spring-boot-maven-plugin:spring boot 的 maven 插件,用于打包 spring boot 应用。 -->
<plugin>
<groupid>org.springframework.boot</groupid>
<artifactid>spring-boot-maven-plugin</artifactid>
</plugin>
</plugins>
</build>
</project>
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论