Как решить, не удалось найти или загрузить ошибку основного класса с весенней загрузкой?

Я создал проект Maven для Spring Boot. У меня много зависимостей Spring и один основной класс:

package com.vastserver;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class MyArtifactApplication {

    public static void main(String[] args) {

//      SpringApplication.run(MyArtifactApplication.class, args);
        System.out.println("hello!");
    }

}

Структура папок каталога src:

.
└── main
    ├── java
    │   └── com
    │       └── vastserver
    │           └── MyArtifactApplication.java
    └── resources
        └── application.properties

В моем pom.xml я использую maven-assembly-plugin, чтобы построить свой проект в отдельном файле .jar. Несмотря на то, что я трижды проверил правильность структуры каталогов и файла основного класса в pom.xml, я продолжаю получать сообщение об ошибке: Error: Could not find or load main class com.vastserver.MyArtifactApplication, когда я запускаю mvn package, а затем java -cp target/vast-ad-server-artifactId-1.0-SNAPSHOT-jar-with-dependencies.jar com.vastserver.MyArtifactApplication или mvn exec:exec. Основной класс работает, если я запускаю его из Intellij, поэтому я знаю, что проблема не в коде, а в настройках сборки Maven. Я потерял в том, где моя проблема может быть.

Мой 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>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.6.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <maven.compiler.release>11</maven.compiler.release>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
        <mainClass>com.vastserver.MyArtifactApplication</mainClass>
        <descriptorRef>jar-with-dependencies</descriptorRef>
        <targetSnapshot>target/vast-ad-server-artifactId-1.0-SNAPSHOT</targetSnapshot>
        <targetWithDependencies>${targetSnapshot}-${descriptorRef}.jar</targetWithDependencies>
    </properties>

    <groupId>com.vastserver</groupId>
    <artifactId>vast-ad-server-artifactId</artifactId>
    <packaging>jar</packaging>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-activemq</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-webflux</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <scope>runtime</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                        <configuration>
                            <archive>
                                <manifest>
                                    <mainClass>${mainClass}</mainClass>
                                </manifest>
                            </archive>
                            <descriptorRefs>
                                <descriptorRef>${descriptorRef}</descriptorRef>
                            </descriptorRefs>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>1.3.2</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>exec</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <executable>java</executable>
                    <arguments>
                        <argument>-cp</argument>
                        <argument>${targetWithDependencies}</argument>
                        <argument>${mainClass}</argument>
                    </arguments>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
6
0
43 096
8
Перейти к ответу Данный вопрос помечен как решенный

Ответы 8

Я понял, что spring-boot-maven-plugin на самом деле строит, поэтому другие плагины не нужны. Если раздел плагинов в maven отредактирован на:

<plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
</plugins>

Тогда работает mvn package и java -jar target/vast-ad-server-artifactId-1.0-SNAPSHOT.jar.

Ответ принят как подходящий

Я думаю, вам следует проверить структуру каталогов артефакта, созданного maven. Обычно артефакты весенней загрузки подготавливаются специальным плагином весенней загрузки, а не плагином сборки maven.

Хотя он имеет суффикс «jar», на самом деле это не jar, у него есть специальный загрузчик классов для загрузки классов из папки BOOT-INF/lib.

Я уже дал подробный ответ о том, что именно происходит, когда приложение весенней загрузки запускает здесь, но суть в том, что если вы используете плагин сборки, вам придется подготовить как файл манифеста, так и довольно сложную структуру папок. Честно говоря, я думаю, что вы должны использовать плагин Spring Boot в качестве первого средства для создания приложений Spring Boot.

Для меня: Maven - проект обновления работал.

maven --> обновить проект меня устраивает

Добавление ко всем приведенным выше ответам щелкните правой кнопкой мыши project-> Maven ->update project-> force update

Это загрузит все недостающие зависимости.

Тем не менее, если это не работает ?? щелкните правой кнопкой мыши pom.xml и запустите как конфигурацию. Убедитесь, что вы используете правильную JRE. Затем установите цель как установить и запустить его.

Важный проверьте версию Java в pom.xml, если она не соответствует установленной версии JRE, вы также можете получить эту ошибку. Так что убедитесь, что это то же самое. Все еще не работает?? Удалить проект из рабочей области и импортировать его обратно.

Rightclickonproject->Maven->UpdateProject-> Установите флажок Принудительное обновление моментальных снимков/релизов-ОК

дайте время обновить проект. Затем просто запустите приложение Rightclickonproject->Runas->Spring Boot App.

попробуйте обновить проект в maven. Иногда при добавлении новой зависимости он хочет, чтобы maven обновлялся там, инструменты Dev не будут работать.

--- Щелкните проект правой кнопкой мыши --- перейти к мавену ---Обновить проект

Ваш исходный файл отсутствует в пути к классам. У меня это произошло, когда я перезапустил STS.

  1. Перейдите в «Выполнить» -> «Выполнить конфигурации» - classpath, в пользовательских записях добавьте свой проект.
  2. Перейдите на вкладку «Исходный код» в «Выполнить конфигурации», добавьте папку рабочей области и выберите файл src, в котором находится ваш основной класс метода. Нажмите «Применить» и «Выполнить». Это будет работать.

Другие вопросы по теме