You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot1.5迁2.x(Java10+QueryDsl)编译错误解决

从JHipster 4.13.3 + Spring Boot 1.5 迁移到 Spring Boot 2.0.2 (Java 10) 问题全解

我刚帮几个项目搞定过类似的迁移,你的问题其实都是Spring Boot 2.x升级里的典型坑,咱们一步步来解决:

1. 先搞定Maven版本依赖与Java版本配置

① Java版本正确写法

Java 10的话,直接用 <java.version>10</java.version> 就对了。Maven从maven-compiler-plugin:3.6.0开始支持这种新的版本命名方式,所以你得确保插件版本至少是3.6.0,配置如下:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version> <!-- 用这个稳定版本就行 -->
            <configuration>
                <release>10</release> <!-- 这个参数比source/target更靠谱,自动适配Java 10的特性 -->
            </configuration>
        </plugin>
    </plugins>
</build>

别用1.10,那是旧的命名方式,Java 9之后就不再使用了。

② 解决依赖版本不一致(2.0.1而非2.0.2)

因为你没使用Spring Boot Starter Parent,必须手动引入spring-boot-dependencies的dependency management来强制锁定所有Spring Boot相关依赖的版本,不然Maven会自动拉取最近的兼容版本(比如2.0.1)。配置如下:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>2.0.2.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

这个配置要放在<dependencies>标签之前,它会帮你统一所有Spring Boot starter的版本,避免出现版本混乱。

2. 修复编译错误:类找不到/包不存在

① EmbeddedServletContainerCustomizer 替换

Spring Boot 2.x把这个类彻底换掉了,原来的EmbeddedServletContainerCustomizer要替换成WebServerFactoryCustomizer<ConfigurableServletWebServerFactory>。举个例子:
原来的代码:

import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer;
import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer;

@Component
public class ServletContainerCustomizer implements EmbeddedServletContainerCustomizer {
    @Override
    public void customize(ConfigurableEmbeddedServletContainer container) {
        container.setPort(8081);
    }
}

改成:

import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory;
import org.springframework.stereotype.Component;

@Component
public class ServletContainerCustomizer implements WebServerFactoryCustomizer<ConfigurableServletWebServerFactory> {
    @Override
    public void customize(ConfigurableServletWebServerFactory factory) {
        factory.setPort(8081);
    }
}

② QueryDslPredicateExecutor 相关问题

JHipster 4.13.3用的QueryDsl 4.1.4和Spring Boot 2.0.x不兼容,你需要升级QueryDsl到4.2.1(这个版本是Spring Boot 2.0.x官方推荐的兼容版本)。同时要调整Maven里的QueryDsl依赖和APT插件配置:
首先,更新QueryDsl的依赖:

<dependencies>
    <!-- QueryDsl核心依赖 -->
    <dependency>
        <groupId>com.querydsl</groupId>
        <artifactId>querydsl-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>com.querydsl</groupId>
        <artifactId>querydsl-core</artifactId>
    </dependency>
    <!-- APT依赖,用于生成Q类 -->
    <dependency>
        <groupId>com.querydsl</groupId>
        <artifactId>querydsl-apt</artifactId>
        <scope>provided</scope>
    </dependency>
</dependencies>

然后调整APT插件(因为Java 10用的是JPMS,需要添加--release参数):

<build>
    <plugins>
        <plugin>
            <groupId>com.mysema.maven</groupId>
            <artifactId>apt-maven-plugin</artifactId>
            <version>1.1.3</version>
            <executions>
                <execution>
                    <goals>
                        <goal>process</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>target/generated-sources/java</outputDirectory>
                        <processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor>
                        <options>
                            <release>10</release>
                        </options>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

另外,如果你用了QueryDslRepositorySupport,注意Spring Data JPA 2.0.x里的包路径有变化,从org.springframework.data.querydsl.QueryDslRepositorySupport改成org.springframework.data.jpa.repository.support.QueryDslRepositorySupport,需要调整import语句。

3. 其他JHipster相关的兼容调整

因为JHipster 4.13.3是针对Spring Boot 1.5做的,还有几个地方要注意:

  • 安全配置:Spring Security 5.x(Spring Boot 2.x默认用这个)的密码编码方式变了,原来的PasswordEncoder相关配置可能需要调整,比如确保BCryptPasswordEncoder的导入路径正确,禁用默认密码编码器的规则也有变化。
  • 数据源配置:Spring Boot 2.x里的DataSourceBuilder的用法有变化,原来的DataSourceBuilder.create()需要改成DataSourceBuilder.create(getClass().getClassLoader())或者指定类加载器。
  • Actuator端点:如果用了Actuator,端点的路径和默认开启状态变了,比如/health现在需要配置management.endpoints.web.exposure.include=health才能访问。

最后,建议你先把依赖和Java版本的问题解决,再逐个修复编译错误,这样能减少很多干扰。

内容的提问来源于stack exchange,提问作者neblaz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 09:01:30