游戏服务器搭建过程中Maven多模块编译遇到的一些问题

这篇具有很好参考价值的文章主要介绍了游戏服务器搭建过程中Maven多模块编译遇到的一些问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        

目录

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,也可以选择其他的包,到时候省的手写

游戏服务器搭建过程中Maven多模块编译遇到的一些问题,香菜聊游戏,游戏,spring boot,spring,maven,原力计划

 1.2 删除垃圾文件

删除所有的文件,只留下pom.xml就行,因为父模块只是做一个模块和依赖管理的作用,因此不需要代码。

游戏服务器搭建过程中Maven多模块编译遇到的一些问题,香菜聊游戏,游戏,spring boot,spring,maven,原力计划

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 创建子模块继承

 继承父模块

游戏服务器搭建过程中Maven多模块编译遇到的一些问题,香菜聊游戏,游戏,spring boot,spring,maven,原力计划

可以看到父模块的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>

使用坐标和版本进行引用,刷新引用就可以在引用中看到了

 游戏服务器搭建过程中Maven多模块编译遇到的一些问题,香菜聊游戏,游戏,spring boot,spring,maven,原力计划

3、多个模块间版本的管理

多个模块中使用的依赖很有可能会有重复,但是怎么管理各个版本呐?

假设上述module-onemodule-two都需要依赖fastjson2,我们之前会在两个模块的pom.xml中加入依赖,但是这样重复的配置看起来似乎不太优雅,如果需要升级要改2个地方,这个时候parent模块的管理功能就可以发挥了

3.1 dependencis

游戏服务器搭建过程中Maven多模块编译遇到的一些问题,香菜聊游戏,游戏,spring boot,spring,maven,原力计划

 在上图中,在dependencis中加入了两个常用的工具库,在子模块中即使不加入也可以使用这个库了!因为子模块除了可以使用自己的依赖之外,还会向上查找父模块的依赖,也就是说,父模块的依赖是向下继承的,因此对于所有模块都要使用的依赖,我们可以写在父模块中。

所以,两个模块都依赖于Spring Web话,也可以将两个模块的Spring Web依赖移至父模块。

所以说父模块和子模块中,依赖也有着继承的关系!父模块的properties也是向下继承的。

3.2 dependencyManagement

dependencyManagement用于管理依赖的版本,我们在父模块的pom.xml加入这个标签:

游戏服务器搭建过程中Maven多模块编译遇到的一些问题,香菜聊游戏,游戏,spring boot,spring,maven,原力计划

dependencyManagement的注意事项:

  • dependencyManagement仅用于管理版本,而不会为自己以及子模块导入依赖,因此在dependencyManagement中声明依赖后,对应的子模块仍然需要在dependencies中加入依赖
  • pom.xmldependencyManagementdependencies同级,并且dependencyManagement中也需要有一个dependencies
  • dependencyManagement不仅可以管理子模块的依赖版本,也可以管理自身的依赖版本
  • 若不想让某个子模块使用父模块dependencyManagement的版本,那就在这个子模块的dependencies中声明对应版本

4、依赖执行

因为在项目中使用了mybatis-plus ,在common模块中定义了一些mapper,在room和game中需要使用,在项目中增加了componentscan ,但是依然在运行的时候报错,提示找不到common中的类,在编辑器中并不报错,这很奇怪,需要在依赖项目中增加一个标签。

这是由于Spring Boot打包的模式问题,我们打开被依赖模块module-twopom.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、总结

不做不知道,手高眼低不行,必须得实践


游戏服务器搭建过程中Maven多模块编译遇到的一些问题,香菜聊游戏,游戏,spring boot,spring,maven,原力计划

京东链接:https://item.jd.com/14010448.html

特色

不留遗漏:全面覆盖Dubbo核心知识点

直击要害:实战化案例精准定位技术细节

学以致用:精要式演示确保开发、学习不脱节

潜移默化:研磨式知识讲解渗透技术要点

提升效率:垂直式技术精讲不饶弯路

循序提升:渐进式知识点编排确保连贯

配套资源:赠送全书案例源文件助力学习文章来源地址https://www.toymoban.com/news/detail-553409.html

到了这里,关于游戏服务器搭建过程中Maven多模块编译遇到的一些问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 如何搭建服务器调试2G/3G/4G模块通信/公网TCP服务器调试

            在调试2G/3G/4G模块网络通信时,个人电脑无法直接进行调试,因为个人电脑连接网络属于局域网,而2G/3G/4G等GSM网络属于广域网,也就是公网,所以如何调试2G/3G/4G网络需要进行内网穿透。         方案一:使用安信可透传云         安信可透传云解决方案是指

    2024年01月21日
    浏览(44)
  • 幻兽帕鲁Palworld游戏服务器怎么搭建?Linux上搭建幻兽帕鲁多人服务器教程

    幻兽帕鲁(Palworld)自1月19日上线以来,仅仅3天时间销量便突破了500万份,目前游戏的同时在线人数已经来到了Steam历史第五,由于前四名均是免费游戏,所以本作也成为了目前Steam付费游戏的在线人数第一,甚至还因为在线人数过多导致官方出现了服务器问题。  搭建服务器

    2024年02月21日
    浏览(39)
  • 【SVN】SVN搭建ubuntu服务器过程(图文超详细)

    目录 步骤0:搭建环境: 步骤一:下载subversion安装包 步骤二:创建版本库目录 步骤三:创建版本库 步骤四:修改SVN配置 步骤五:重启SVN服务 在ubuntu系统搭建svn服务器,windows系统作为客户端用svn客户端上传文件。 本文只讲ubuntu下svn服务器的搭建,windows用svn客户端上传下载

    2024年02月07日
    浏览(43)
  • 幻兽帕鲁服务器价格贵吗?1分钟搞定幻兽帕鲁游戏联机服务器搭建

    幻兽帕鲁服务器价格多少?腾讯云幻兽帕鲁游戏服务器多少钱?腾讯云幻兽帕鲁游戏服务器的费用取决于多个因素,包括配置、带宽、地区等。一般来说,腾讯云的游戏服务器租用价格需要根据具体的配置和租用时间进行计算。 对于4核16G的配置,腾讯云提供不同时长的费用

    2024年02月21日
    浏览(47)
  • 腾讯云之轻量应用服务器搭建Socks5代理服务器实现游戏单窗口单IP

    最近出海的同学很多,小螺号时隔两年多给大家带来轻量应用服务器搭建Socks5的教程。 轻量应用服务器,有一点好处,带宽超大,但是限制流量,一般用用来说,流量也足够了,只要是价格便宜。 直达领取优惠券 第一步 直达轻量应用服务器页面 点击立即选购 轻量应用服务

    2023年04月09日
    浏览(71)
  • 幻兽帕鲁“加入多人游戏(专用服务器)”是什么意思?怎么搭建自己的幻兽帕鲁服务器?

    幻兽帕鲁游戏进入界面有个“加入多人游戏(专用服务器)”的选型,其实这个就是多人联机模式,它除了可以进入官方的服务器联机游戏,还可以连接到自己专门搭建的服务器里,去在一个比较私密的空间进行单人游戏或者几个朋友联机游戏。 幻兽帕鲁的专用服务器搭建是

    2024年02月22日
    浏览(37)
  • 记录一次云服务器使用docker搭建kafka的过程

    创建网络 一定要将zookeeper注册中心与kafka建在一个network中,不然在springboot 集成 kakfa的demo测试代码中进行消息发送时会超时,报错: E x c e p t i o n t h r o w n w h e n s e n d i n g a m e s s a g e w i t h k e y = ‘ n u l l ‘ Exception thrown when sending a message with key=‘null‘ E x ce pt i o n t h ro w

    2024年02月04日
    浏览(34)
  • 蓝易云:Ubuntu使用nginx搭建webdav文件服务器的详细过程

    在 Ubuntu 上使用 Nginx 搭建 WebDAV 文件服务器的详细过程如下: 安装 Nginx: 创建 WebDAV 目录: 配置 Nginx: 打开 Nginx 配置文件: 在  server  块内添加以下配置: 保存并关闭文件。 创建用户认证文件: 替换  your_username  为你想要设置的用户名。根据提示输入密码并确认。 检查

    2024年02月20日
    浏览(38)
  • 【贪吃蛇小游戏】宝塔面板快速搭建贪吃蛇小游戏Web网站 - 无需云服务器

    转载自远程内网穿透的文章:Linux使用宝塔面板搭建网站,并内网穿透实现公网访问 宝塔面板作为简单好用的服务器运维管理面板,它支持Linux/Windows系统,我们可用它来一键配置LAMP/LNMP环境、网站、数据库、FTP等,通过Web端轻松管理服务器。 以下教程,我们将演示使用宝塔

    2024年02月05日
    浏览(50)
  • Idea+maven+springboot项目搭建系列--2 整合Rabbitmq完成客户端&服务器端消息收发

    前言:本文通过springBoot -maven 框架,对Rabbitmq 进行整合,完成客户端消息的发送和消费; 1 为什么要使用Rabbitmq: RabbitMQ 是一个可靠的、灵活的、开源的消息中间件,具有以下优点: 异步通信:RabbitMQ 支持异步通信,使得消息发送者和接收者能够异步处理,提高了系统性能和

    2024年02月07日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包