Как я могу сказать Spring Boot, какой основной класс использовать для исполняемого jar?
Execution default of goal
org.springframework.boot:spring-boot-maven-plugin:1.0.1.RELEASE:repackage
failed:
Unable to find a single main class from the following candidates
мой проект имеет более одного класса с main метод. Как я могу сказать плагину Spring Boot Maven, какой из классов он должен использовать в качестве основного класса?
9 ответов:
добавьте свой начальный класс в свой pom:
<properties> <!-- The main class to start by executing java -jar --> <start-class>com.mycorp.starter.HelloWorldApplication</start-class> </properties>
Если вы не используете spring-boot-starter-parent pom, то из Весна документации:
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>1.1.3.RELEASE</version> <configuration> <mainClass>my.package.MyStartClass</mainClass> <layout>ZIP</layout> </configuration> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin>
Если вы используете spring-boot-starter-parent в своем pom, вы просто добавляете следующее в свой pom:
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>затем сделайте свой пакет mvn.
посмотреть эта весенняя страница документов.
очень важным аспектом здесь является упоминание о том, что структура каталогов должна быть src/main/java/nameofyourpackage
для тех, кто использует Gradle (вместо Maven), ссылки здесь:
основной класс также может быть настроен явно с помощью свойства mainclassname задачи:
bootJar { mainClassName = 'com.example.ExampleApplication' }кроме того, имя основного класса можно настроить на уровне проекта с помощью свойства mainClassName DSL Spring Boot:
springBoot { mainClassName = 'com.example.ExampleApplication' }
я попробовал следующий код в pom.xml и это сработало для меня
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <mainClass>myPackage.HelloWorld</mainClass> </configuration> </plugin> <plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <fork>true</fork> <executable>D:\jdk1.8\bin\javaw.exe</executable> </configuration> </plugin> </plugins>
я переименовал свой проект, и он все еще находил старый
Applicationкласс на пути сборки. Я удалил его в папку "build", и все было в порядке.
начиная с Spring Boot 1.5, вы можете полностью игнорировать подверженный ошибкам строковый литерал в pom или build.градля. Инструмент переупаковки (через плагин maven или gradle) выберет тот, который аннотирован
@SpringBootApplicationдля вас. (См. этот вопрос для получения подробной информации:https://github.com/spring-projects/spring-boot/issues/6496)
видели эту проблему с Java 1.9 и SpringBoot 1.5.х, когда основной класс не указан явно.
с Java 1.8 он может найти основной класс без явного свойства, и "пакет mvn" отлично работает.
Comments