当使用Eclipse来运行spring-boot-devtools + gradle时,会出现ClassCastException的异常
你有什麼問題?
-
- 当在Eclipse中将Spring Boot Devtools与Gradle一起作为”Spring Boot应用程序”运行时,会发生ClassCastException的错误。
- 虽然通过gradle的”bootRun”命令可以成功启动,但代码的更改不会得到反映。
解决策略
-
- 使用Gradle的”bootRun”进行启动
-
- 勾选项目的”自动构建”选项
- 将”Java的构建路径”与Gradle的构建目录对应
说明
【Java】使用Spring Boot编写Hello World!(初学篇)| Marine Road.
1. 创建启动项目
首先,我们创建一个Spring Boot的启动项目。


-
- 型: Gradle(Buildship 2.x)
-
- パッケージング: war
-
- Javaバージョン: 8
- 言語: Java
后来保持默认设置即可。

-
- Spring Boot Version: 1.5.10
-
- DevTools
-
- Thymeleaf
- Web
作为依存关系,只选择上述的选项。

-
- ベース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应用程序”并运行。


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”命令来执行



(*^-゚)vィェィ♪
我以为一切都顺利了!…然而这个想法很快被打破。
即使我修改了源代码,也不会立即反映出来……orz
当然,如果停止gradle任务并重新运行,就能够使其生效,但既然我正在使用开发工具,我想要即时反映!
于是我开始了一段不断尝试和摸索的过程……
更改项目的构建路径
经过试错,我意识到当保存源代码时自动构建路径与gradle的构建路径不匹配。
如果没有更改Eclipse的构建路径设置,构建结果将保存在bin目录下。
如果尝试根据gradle的构建来做出改变呢…?

主要的java文件夹路径是:src/main/java
输出文件夹路径是:build/classes/main
主要的资源文件夹路径是:src/main/resources
输出文件夹路径是:build/resources
测试的java文件夹路径是:src/test/java
输出文件夹路径是:build/classes/test


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