SpringBoot no main manifest attribute (maven)

69,250

Solution 1

Try adding repackage goal to execution goals.

Otherwise you would need to call the plugin explicitly as mvn package spring-boot:repackage.

With the goal added, you have to call only mvn package.

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <mainClass>com.places.Main</mainClass>
    </configuration>

    <executions>
        <execution>
            <goals>
                <goal>repackage</goal>
            </goals>
        </execution>
    </executions>
</plugin>

Solution 2

During the Maven package lifecycle phase, the jar archive is enhanced by Spring Boot Maven Plugin and the original jar file (that should have been built using the standard maven-jar-plugin) is replaced with an enhanced executable jar.

Hence you have either to issue the spring-boot:repackage goal yourself when building your module:

mvn package spring-boot:repackage

Or add the goal explicitly within the plugin configuration:

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <mainClass>com.places.Main</mainClass>
    </configuration>
    <executions>
        <execution>
            <goals>
                <goal>repackage</goal>
            </goals>
        </execution>
    </executions>
</plugin>

You can find more details about the Spring Boot Maven Plugin repackage goal within the official documentation.

Solution 3

3 things:
- You have the parent entry in your pom.
- Verify that your plugin is in the build portion of the pom.
- You have a class with the @SpringBootApplicaion annotation.

pom.xml:

...  
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.8.RELEASE</version>
  </parent>

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

And a class that looks something like this:

@SpringBootApplication
public class Application {

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

}

Solution 4

You can specify a parent POM e.g. :

<parent>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-parent</artifactId>
   <version>2.1.4.RELEASE</version>
</parent>

During the package goal, the repackage goal will be executed and you'll then get an executable jar.

Solution 5

Reback your jar or war using the following command:

mvn package spring-boot:repackage

Add the plugin in plugins parent node like below in pom.xml:

<plugin>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-maven-plugin</artifactId>
   <configuration>                   
      <mainClass>com.sify.scdm.solutionconfigurator.ScdmApplication</mainClass>
   </configuration>
   <executions>
      <execution>
      <goals>
         <goal>repackage</goal>
      </goals>
      </execution>
   </executions>
</plugin>
   



        
Share:
69,250
JeyJ
Author by

JeyJ

Updated on July 08, 2022

Comments

  • JeyJ
    JeyJ almost 2 years

    When running my jar file : java -jar target/places-1.0-SNAPSHOT.jar I'm getting the next error :

    no main manifest attribute, in target/places-1.0-SNAPSHOT.jar
    

    My pom.xml contains the spring-boot-maven-plugin :

     <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <mainClass>com.places.Main</mainClass>
                </configuration>
     </plugin>
    

    I also tried to create a MANIFEST.MF FILE and specifying the class but it didnt help.

    In addition, I also tried :

    <properties>
          <!-- The main class to start by executing "java -jar" -->
          <start-class>com.places.Main</start-class>
    </properties>
    

    My main :

    @SpringBootApplication
     public class Main {
    public static void main(String[] args) throws InterruptedException {
        SpringApplication.run(Main.class,args);
      }
      }
    

    any idea what else can I try ?

  • JeyJ
    JeyJ about 5 years
    It helped ! Can you explain why I need to package it ?
  • Bandham Manikanta
    Bandham Manikanta almost 4 years
    If you have spring-boot-starter-parent in you pom, you don't need to define repackage goal in the plugin. Official doc: docs.spring.io/spring-boot/docs/2.3.0.RELEASE/maven-plugin/…
  • Kevin Valdez
    Kevin Valdez almost 4 years
    The reason for this is that you are no using spring as parent I assume you have it set on dependencyManagement, then you have to explicit define which goal to be hooked for spring-boot-maven-plugin ir order to get an executable jar file. In this case repackage.
  • Ajeetkumar
    Ajeetkumar over 3 years
    github.com/ajeetkumarv/healthlog I tried both repackage and plugin but did not work. main method is in application module
  • tmarwen
    tmarwen over 3 years
    Hi @Ajeetkumar, could you report a new question with your build configuration and point it out. I will be glad to help.
  • emoleumassi
    emoleumassi over 2 years
    similar issue with multi module: stackoverflow.com/questions/70833195/…