Maven, Spring Initializr и Eclipse: Как установить один основной класс?

#java #spring #eclipse #spring-boot #maven

Вопрос:

Я создал проект spring maven с spring initializr, который сгенерировал следующий pom:

 <?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 https://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.4.8</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.spring-docker-test</groupId>
    <artifactId>spring-boot-docker</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>spring-boot-docker</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>11</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</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>
            </plugin>
        </plugins>
    </build>

</project>
 

Затем я распаковал сгенерированный zip-файл, импортировал его в Eclipse и поставил целью проекта spring-boot:run

Я также добавил проект, как описано здесь

В src/main/java/hello/Application.java

 package hello;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
public class Application {

  @RequestMapping("/")
  public String home() {
    return "Hello Docker World";
  }

  public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
  }

}
 

Теперь, когда я пытаюсь «Запустить как > Сборка Maven», я получаю следующее сообщение об ошибке

 [ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:2.4.8:run (default-cli) on project spring-boot-docker: Execution default-cli of goal org.springframework.boot:spring-boot-maven-plugin:2.4.8:run failed: Unable to find a single main class from the following candidates [hello.Application, com.springdockertest.springbootdocker.SpringBootDockerApplication] -> [Help 1]
 

Как мне установить один основной класс (в pom.xml файле?)

Ответ №1:

Вы можете установить его, добавив <configuration> в свой pom.xml объявление плагина Maven для загрузки:

 <build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>             
            <configuration>    
                <mainClass>hello.Application</mainClass>
            </configuration>
        </plugin>
    </plugins>
</build>
 

Комментарии:

1. Большое спасибо!. Могу я задать несколько вопросов? Во-первых, является ли это лучшей практикой для обработки такого архива, созданного spring initializr? Я имею в виду, чтобы добавить собственный проект, а затем вручную добавить его в pom.xml ? Кроме того, сколько собственных пакетов/проектов на Maven — что это такое? Тоже проект? — разве можно что-то добавить? Только один? Во-вторых: как получилось, что целевое имя является spring-boot-docker-0.0.1-SNAPSHOT.jar , а не, как указано в руководстве, gs-spring-boot-docker-0.1.0.jar . В нем также говорится, что на терминале команда будет ./mvnw package amp;amp; java -jar target/gs-spring-boot-docker-0.1.0.jar

2. Разве я не выбрал правильную фазу / цель с docker-boot:run помощью «может быть»?