Paper服务器集成Spring Boot时无法找到自动配置类问题求助
问题解决:Paper服务器中Spring Boot无法加载自动配置文件
核心原因分析
问题出在两个关键点:
- Maven Shade插件打包时默认覆盖同名文件,导致Spring自动配置文件(
spring.factories、AutoConfiguration.imports)被合并丢失 - Paper插件的类加载器环境特殊,线程上下文类加载器无法正确读取插件Jar内的META-INF资源
具体解决方案
1. 修复Maven Shade插件配置,合并Spring配置文件
Shade插件需要添加资源转换器,将所有依赖中的Spring自动配置文件内容追加合并,避免被覆盖。修改pom.xml中的shade插件配置:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.2.4</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <createDependencyReducedPom>false</createDependencyReducedPom> <filters> <filter> <artifact>*:*</artifact> <excludes> <exclude>META-INF/*.SF</exclude> <exclude>META-INF/*.DSA</exclude> <exclude>META-INF/*.RSA</exclude> </excludes> </filter> </filters> <!-- 添加资源转换器合并Spring配置文件 --> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> <resource>META-INF/spring.factories</resource> </transformer> <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> <resource>META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports</resource> </transformer> </transformers> </configuration> </execution> </executions> </plugin>
2. 使用插件自身类加载器替代线程上下文类加载器
Paper服务器的线程上下文类加载器并非插件的类加载器,修改插件主类的ResourceLoader初始化逻辑:
public class ParadubschManager extends JavaPlugin { @Override public void onEnable() { ... // 使用插件自身的类加载器 ResourceLoader loader = new DefaultResourceLoader(this.getClassLoader()); ctx = SpringConfigurer.initializeSpringApplication(loader); ... } }
3. 正确传递自定义ResourceLoader给SpringApplication
当前SpringConfigurer未使用传入的loader,修改初始化方法:
public static ConfigurableApplicationContext initializeSpringApplication(ResourceLoader loader) { return new SpringApplicationBuilder(SpringApplication.class) .resourceLoader(loader) // 传入自定义类加载器 .properties(getConfiguration()) .run(); }
4. 统一Java版本配置
你的pom.xml配置Java 8,但服务器运行用Java 17,虽然Spring Boot 2.7.2兼容,但统一版本可避免兼容性问题:
<properties> <java.version>17</java.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties>
验证步骤
- 执行
mvn clean package重新打包插件 - 检查生成的Jar包,确认
META-INF/spring.factories和META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports包含完整的自动配置类条目 - 部署到Paper服务器启动测试
内容的提问来源于stack exchange,提问作者Crafter_Y
相关产品推荐
相关产品推荐

