目录
1、多模块的创建
1.1 父模块的创建
1.2 删除垃圾文件
1.3 修改pom.xml
1.4 创建子模块继承
2、子模块之间的互相引用
3、多个模块间版本的管理
3.1 dependencis
3.2 dependencyManagement
4、依赖执行
5、在Spring Boot项目中加载依赖项目的组件有几种常用的方法
5.1. 使用@ComponentScan注解:
2. 使用@Import注解:
3. 使用@Configuration注解和@Bean方法:
6、@ComponentScan 扫描依赖项的包
游戏服务器有好几个项目,所以涉及到多个模块,这个开发中也是经常遇到的,但是因为之前一直没怎么关注,所以在开发的过程中的一些细节问题还是不懂,这次记录下,也分享下同样的问题给没试过的同学
1、多模块的创建
使用idea进行模块的创建,主要分为以下几步
1.1 父模块的创建
直接创建一个Maven项目,在这个过程中选择了Spring web 和Lombok,也可以选择其他的包,到时候省的手写
1.2 删除垃圾文件
删除所有的文件,只留下pom.xml就行,因为父模块只是做一个模块和依赖管理的作用,因此不需要代码。
1.3 修改pom.xml
修改这个父模块的pom.xml
文件,首先把<dependencies>
节点、<build>
节点和<properties>
全部删除:然后修改版本号为自己定义的(方便后续子模块指定父模块)
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.13</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>MultMoudle</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>MultMoudle</name>
<description>MultMoudle</description>
<packaging>pom</packaging>
</project>
1.4 创建子模块继承
继承父模块
可以看到父模块的pom中,已经有子模块的配置了。
1.5 子模块pom
<groupId>com.macro.mall</groupId>
<artifactId>mall-admin</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>mall-admin</name>
<description>mall-admin project for mall</description>
<parent>
<groupId>com.macro.mall</groupId>
<artifactId>mall</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
子模块继承父模块,设置打包方式<packaging>jar</packaging>
2、子模块之间的互相引用
因为有一些接口文件需要在几个项目中共同使用,所以就要抽取相同的文件到common项目中,这个是非常合理的,在room和game中怎么引用呐,非常简单,和其他的jar包一样
<dependency>
<groupId>com.pdool</groupId>
<artifactId>common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
使用坐标和版本进行引用,刷新引用就可以在引用中看到了
3、多个模块间版本的管理
多个模块中使用的依赖很有可能会有重复,但是怎么管理各个版本呐?
假设上述module-one
和module-two
都需要依赖fastjson2
,我们之前会在两个模块的pom.xml中加入依赖,但是这样重复的配置看起来似乎不太优雅,如果需要升级要改2个地方,这个时候parent模块的管理功能就可以发挥了
3.1 dependencis
在上图中,在dependencis中加入了两个常用的工具库,在子模块中即使不加入也可以使用这个库了!因为子模块除了可以使用自己的依赖之外,还会向上查找父模块的依赖,也就是说,父模块的依赖是向下继承的,因此对于所有模块都要使用的依赖,我们可以写在父模块中。
所以,两个模块都依赖于
Spring Web
话,也可以将两个模块的Spring Web
依赖移至父模块。
所以说父模块和子模块中,依赖也有着继承的关系!父模块的properties
也是向下继承的。
3.2 dependencyManagement
dependencyManagement
用于管理依赖的版本,我们在父模块的pom.xml
加入这个标签:
dependencyManagement
的注意事项:
-
dependencyManagement
仅用于管理版本,而不会为自己以及子模块导入依赖,因此在dependencyManagement
中声明依赖后,对应的子模块仍然需要在dependencies
中加入依赖 - 在
pom.xml
中dependencyManagement
和dependencies
同级,并且dependencyManagement
中也需要有一个dependencies
-
dependencyManagement
不仅可以管理子模块的依赖版本,也可以管理自身的依赖版本 - 若不想让某个子模块使用父模块
dependencyManagement
的版本,那就在这个子模块的dependencies
中声明对应版本
4、依赖执行
因为在项目中使用了mybatis-plus ,在common模块中定义了一些mapper,在room和game中需要使用,在项目中增加了componentscan ,但是依然在运行的时候报错,提示找不到common中的类,在编辑器中并不报错,这很奇怪,需要在依赖项目中增加一个标签。
这是由于Spring Boot打包的模式问题,我们打开被依赖模块module-two
的pom.xml
文件找到最下面<build>
节点中,在spring-boot-maven-plugin
插件部分中加入下面配置:
<classifier>exec</classifier>
最终common中pom的定义
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<classifier>execute</classifier>
</configuration>
</plugin>
</plugins>
</build>
5、在Spring Boot项目中加载依赖项目的组件有几种常用的方法
在Spring Boot项目中加载依赖项目的组件有几种常用的方法:
5.1. 使用@ComponentScan注解:
在主应用程序类上使用@ComponentScan注解,指定要扫描的包路径。这将使Spring Boot扫描并加载依赖项目中带有@Component、@Service、@Repository等注解的组件。例如:
@SpringBootApplication
@ComponentScan(basePackages = "com.example.dependencyproject")
public class MyApplication {
// ...
}
2. 使用@Import注解:
在主应用程序类上使用@Import注解,引入依赖项目中的配置类或组件类。这将使Spring Boot加载这些配置类并注册其中的组件。例如:
@SpringBootApplication
@Import(com.example.dependencyproject.MyConfiguration.class)
public class MyApplication {
// ...
}
3. 使用@Configuration注解和@Bean方法:
如果依赖项目中有@Configuration注解的配置类,可以在主应用程序类中使用@Bean方法来加载其中的组件。例如:
@SpringBootApplication
public class MyApplication {
// ...
@Bean
public MyComponent myComponent() {
return new MyComponent();
}
}
这样,MyComponent将作为一个Bean被加载到Spring应用程序上下文中。
根据你的具体情况和依赖项目的结构,你可以选择适合的方法来加载依赖项目的组件。请注意,为了能够加载依赖项目的组件,确保依赖项目已被正确地添加为项目的依赖项,并且在构建和部署过程中能够被正确地引用和访问。
6、@ComponentScan 扫描依赖项的包
@ComponentScan 注解可以用于指定要扫描的包,它的作用不限于只扫描依赖项的包。@ComponentScan`可以扫描指定包及其子包下的组件,并将其加载到应用程序的上下文中。
当你在 Spring Boot 应用程序的主类上使用 `@ComponentScan` 注解时,它将扫描指定的包及其子包,并注册在这些包中使用了 `@Component`、`@Service`、`@Repository`、`@Controller` 等注解的组件。
如果你指定的包路径包括了依赖项的包,那么它将扫描并加载依赖项中的组件。但是需要注意,`@ComponentScan` 不会限制只扫描依赖项的包,它将扫描所有指定的包路径下的组件。
举个例子,假设你的 Spring Boot 应用程序的主类上使用了以下的 `@ComponentScan` 注解:
@SpringBootApplication
@ComponentScan(basePackages = {"com.example.myapp", "com.example.dependency"})
public class MyApplication {
// ...
}
在上述示例中,`@ComponentScan` 将扫描 `com.example.myapp` 包及其子包以及 `com.example.dependency` 包及其子包下的组件,并将它们加载到应用程序的上下文中。这样,你可以同时加载依赖项中的组件和应用程序本身的组件。
总之,`@ComponentScan` 注解不仅限于扫描依赖项的包,它可以扫描指定包及其子包下的所有组件,并将它们加载到应用程序的上下文中。
注:
如果你在 Spring Boot 应用程序的主类上使用了 @ComponentScan
注解,并指定了包路径,只有在指定的包路径下的本项目组件会被自动加载到应用程序的上下文中。
@ComponentScan
注解仅扫描指定的包及其子包下的组件,并将它们加载到应用程序的上下文中。如果本项目中的组件不在指定的包路径下,它们将不会被自动加载。
7、总结
不做不知道,手高眼低不行,必须得实践
京东链接:https://item.jd.com/14010448.html
特色
不留遗漏:全面覆盖Dubbo核心知识点
直击要害:实战化案例精准定位技术细节
学以致用:精要式演示确保开发、学习不脱节
潜移默化:研磨式知识讲解渗透技术要点
提升效率:垂直式技术精讲不饶弯路
循序提升:渐进式知识点编排确保连贯文章来源:https://www.toymoban.com/news/detail-553409.html
配套资源:赠送全书案例源文件助力学习文章来源地址https://www.toymoban.com/news/detail-553409.html
到了这里,关于游戏服务器搭建过程中Maven多模块编译遇到的一些问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!