java - AWS EC2 Java Spring Boot - 线程“主”java.lang.NoClassDefFoundError 中的异常:org/springframework/boot/SpringApplication
问题描述
您好,我正在尝试在 AWS EC2 实例中运行 Spring Boot,但出现以下错误:
EC2 中的命令:java -jar app-dal-1.0-SNAPSHOT.jar
Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/boot/SpringApplication
at com.smartcommunity.smartparking.appdal.BootApp.main(BootApp.java:12)
Caused by: java.lang.ClassNotFoundException: org.springframework.boot.SpringApplication
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 1 more
在我的本地机器上一切正常。
本地 Java 版本“9.0.4”-EC2 Java 版本 1.8.0
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.smartcommunity.smartparking</groupId>
<artifactId>app-dal</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.4.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.0.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>4.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.8</version>
</dependency>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver</artifactId>
<version>3.5.0</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.3.1</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.3.1</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-core</artifactId>
<version>8.5.32</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>com.smartcommunity.smartparking.appdal.BootApp</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
</project>
我正在遵循的步骤,使用 IntelliJ Maven 生命周期:
- Maven 清洁
- Maven编译
- Maven 包
- Maven 安装
解决方案
使用 Spring Boot 时,它需要 jar 文件中的特殊结构。spring-boot-maven-plugin
确保在 jar 中创建此结构。
spring-boot-maven-plugin
专为基于 Spring Boot 的应用程序创建可执行 jar 文件而设计和构建。因此,不要显式添加>maven-dependency-plugin
and maven-jar-plugin
,而是用单个spring-boot-maven-plugin
.
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<plugin>
</plugins>
</build>
基本上这就是你所需要的。
推荐阅读
- clojure - 如何在 Clojure 中做除法功能?
- spring-boot - 将应用程序启动文件放在包中时,Swagger 不起作用。Kotlin Springboot
- python - 我必须使用来自 scipy.io 的波形文件,但我不能
- firebase - Firebase:使用 URL 段重写为自定义 html 文件
- tensorflow - 我正在尝试合并 2 个预训练的 keras 模型但失败了
- php - LexikJWTAuthenticationBundle | JwtToken 正在工作,但身份验证显示“访问此资源需要完全身份验证”。
- c# - 在 C# 中创建一个 powershell 对象
- oracle - 限制 Oracle Apex 中的状态
- php - 为什么这个 php 代码在没有在函数内部声明变量全局的情况下运行?
- python - 从上层文件夹中的文件导入变量