当使用Eclipse来运行spring-boot-devtools + gradle时,会出现ClassCastException的异常

你有什麼問題?

    1. 当在Eclipse中将Spring Boot Devtools与Gradle一起作为”Spring Boot应用程序”运行时,会发生ClassCastException的错误。

 

    虽然通过gradle的”bootRun”命令可以成功启动,但代码的更改不会得到反映。

解决策略

    1. 使用Gradle的”bootRun”进行启动

 

    1. 勾选项目的”自动构建”选项

 

    将”Java的构建路径”与Gradle的构建目录对应

说明

【Java】使用Spring Boot编写Hello World!(初学篇)| Marine Road.

1. 创建启动项目

首先,我们创建一个Spring Boot的启动项目。

image.png
image.png
    • 型: Gradle(Buildship 2.x)

 

    • パッケージング: war

 

    • Javaバージョン: 8

 

    言語: Java

后来保持默认设置即可。

image.png
    • Spring Boot Version: 1.5.10

 

    • DevTools

 

    • Thymeleaf

 

    Web

作为依存关系,只选择上述的选项。

image.png
    • ベースURL: http://start.spring.io/starter.zip

完全URL: http://start.spring.io/starter.zip?name=demo03&groupId=com.example&artifactId=demo03&version=0.0.1-SNAPSHOT&description=Demo+project+for+Spring+Boot&packageName=com.example.demo&type=gradle-project&packaging=war&javaVersion=1.8&language=java&bootVersion=1.5.10.RELEASE&dependencies=devtools&dependencies=thymeleaf&dependencies=web

创建HelloController.java

当启动器项目完成后,将添加HelloController。

@RestController
public class HelloController {

    @RequestMapping("/hello")
    public String hello() {
        return "Hello World !!";
    }

}

3. 作为一个Spring Boot应用来执行

右键点击项目,选择“Spring Boot应用程序”并运行。

image.png
image.png
Exception in thread "main" java.lang.ClassCastException: java.base/jdk.internal.loader.ClassLoaders$AppClassLoader cannot be cast to java.base/java.net.URLClassLoader
    at org.springframework.boot.devtools.restart.DefaultRestartInitializer.getUrls(DefaultRestartInitializer.java:93)
    at org.springframework.boot.devtools.restart.DefaultRestartInitializer.getInitialUrls(DefaultRestartInitializer.java:56)
    at org.springframework.boot.devtools.restart.Restarter.<init>(Restarter.java:140)
(略)

(╯°□°)╯︵ ┻━┻
…这就是这次事件的起因。虽然在Java9中经常出现ClassCastException的错误,但是这次我使用的是Java8…
然后我尝试的下一个方法是,既然现在是一个gradle项目,是不是可以从gradle中启动呢?

4. 使用gradle的”bootRun”命令来执行

image.png
image.png
image.png

(*^-゚)vィェィ♪
我以为一切都顺利了!…然而这个想法很快被打破。
即使我修改了源代码,也不会立即反映出来……orz
当然,如果停止gradle任务并重新运行,就能够使其生效,但既然我正在使用开发工具,我想要即时反映!
于是我开始了一段不断尝试和摸索的过程……

更改项目的构建路径

经过试错,我意识到当保存源代码时自动构建路径与gradle的构建路径不匹配。
如果没有更改Eclipse的构建路径设置,构建结果将保存在bin目录下。
如果尝试根据gradle的构建来做出改变呢…?

image.png

主要的java文件夹路径是:src/main/java
输出文件夹路径是:build/classes/main

主要的资源文件夹路径是:src/main/resources
输出文件夹路径是:build/resources

测试的java文件夹路径是:src/test/java
输出文件夹路径是:build/classes/test

image.png
image.png

☆(^o^)乂(^-^)☆ 好开心!保存源代码后立即反映了!※我还没有确认下面的资源,如果路径错误我道歉。

广告
将在 10 秒后关闭
bannerAds