java - Spring DevTools 不包含在使用 spring-boot-maven-plugin 打包的 fat jar 中
问题描述
我正在尝试使用 spring-boot 插件创建一个胖 jar。但它一直给我 NoClassDefFound 异常。
我的 pom 中有以下内容:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpmime</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork>
<mainClass>${start-class}</mainClass>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
我使用它打包它
mvn clean package spring-boot:repackage
,我也试过
mvn clean install spring-boot:repackage
当我稍后尝试运行它时
java -jar myapp.jar
它给了我以下异常
Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/boot/devtools/filewatch/FileChangeListener
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
at java.lang.Class.getDeclaredMethod(Unknown Source)
at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:47)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:50)
at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51)
Caused by: java.lang.ClassNotFoundException: org.springframework.boot.devtools.filewatch.FileChangeListener
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:93)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 7 more
我尝试了我在网上找到的所有解决方案,但它不起作用。
解决方案
添加了这个:
<excludeDevtools>false</excludeDevtools>
到 spring-boot-maven-plugin:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork>
<excludeDevtools>false</excludeDevtools>
<mainClass>${start-class}</mainClass>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
默认情况下不包括开发工具。
推荐阅读
- c++ - C++ 属性名称应该用双下划线包裹吗?
- c# - 使用 AutoMapper 将多个对象映射到一个对象
- r - R中递归解决方案的迭代
- algorithm - Haskell 中的 Floyd-Warshall 算法
- php - 在输入/文本区域内编写 HTML / PHP 代码
- python - 关于 tf.keras SGD 批处理
- javascript - 无需单击按钮的表单的 JavaScript 功能
- c# - 使用 C# 以编程方式获取 Mac OS 上已安装程序的列表
- python - 使用 tensorflow 和 TFBertForNextSentencePrediction 在特定语料库上进一步训练 bert
- javascript - 参数声明本身