Здравствуйте, я пытаюсь запустить Spring Boot в экземпляре AWS EC2 и получаю следующую ошибку:
Команда в 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
пом.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:
Я запускал локально с Java 1.8, и все выглядит нормально.
Ошибка говорит о том, что Java не может найти указанный класс. Откройте файл jar (это ZIP-файл, и вы можете разархивировать его) и найдите соответствующий включенный файл jar/class. Если его там нет, то на вашем локальном компьютере он, вероятно, находится в вашем пути к классам.
Удалите свои плагины и используйте spring-boot-maven-plugin, чтобы создать правильный исполняемый файл jar. Также mvn install уже включает compile и package
@M.Deinum M.Deinum это сработало ... спасибо, мне просто нужно было добавить этот плагин в pom.xml, и это сработало ... большое спасибо!




Скопируйте выходной файл jar из целевого репо в другое место и выполните его на своем локальном компьютере. Дайте мне знать, если у вас возникнут какие-либо проблемы. В этом случае мы должны изменить файл pom на сгенерированные ресурсы.
Извините, поскольку я новый участник, я не могу прокомментировать это в вашем вопросе.
Привет .. Да, я столкнулся с той же проблемой. Это означает, что если я выполняю в целевой папке, вероятно, используются конфигурации из этих папок, и они не были упакованы с файлом .jar. Пожалуйста, дайте мне знать, как изменить pom.xml... 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.base/jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown Source)
Эй, решение, приведенное в приведенных выше комментариях, сработало, как и ожидалось... Большое спасибо за помощь в устранении этой проблемы!
Добавление spring-boot-maven-plugin в файл pom.xml в качестве одного из плагинов конфигурации помогло. Спасибо всем, кто прокомментировал, Решение этой проблемы и кто пришел с решением - в комментариях. Спасибо @М. Дейнум
При использовании Spring Boot он ожидает особую структуру в вашем файле jar. spring-boot-maven-plugin гарантирует, что эта структура будет создана в банке.
spring-boot-maven-plugin специально разработан и создан для создания исполняемых файлов jar для приложений на основе Spring Boot. Поэтому вместо явно добавленных >maven-dependency-plugin и maven-jar-plugin замените их одним spring-boot-maven-plugin.
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<plugin>
</plugins>
</build>
В принципе, это все, что вам нужно.
Разница в версии Java должна быть проблемой. Попробуйте запустить приложение локально, используя Java 1.8.