SpringBoot no main manifest attribute (maven)

JavaMavenSpring BootManifestSpring Boot-Maven-Plugin

Java Problem Overview


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

The 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>

Main class:

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

Any idea what else can I try?

Java Solutions


Solution 1 - Java

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 - Java

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 - Java

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 - Java

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 - Java

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>
   



        

Solution 6 - Java

added build tag in pom.xml as below solved issue for me.

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

Solution 7 - Java

Add the plugin below.This worked for me

 <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-shade-plugin</artifactId>
      <version>1.6</version>
      <executions>
           <!-- Run shade goal on package phase -->
           <execution>
                <phase>package</phase>
                <goals>
                     <goal>shade</goal>
                </goals>
                <configuration>
                     <transformers>
                          <!-- add Main-Class to manifest file -->
                          <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                               <mainClass>MainClass</mainClass>
                               <manifestEntries>
                                    <Class-Path>.</Class-Path>
                                </manifestEntries>
                          </transformer>
                          <transformer
                                 implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                                 <resource>META-INF/spring.handlers</resource>
                          </transformer>
                          <transformer
                                 implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                                 <resource>META-INF/spring.schemas</resource>
                          </transformer>
                     </transformers>
                </configuration>
           </execution>
      </executions>
</plugin>

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionJeyJView Question on Stackoverflow
Solution 1 - JavaMatejView Answer on Stackoverflow
Solution 2 - JavatmarwenView Answer on Stackoverflow
Solution 3 - JavaMattCView Answer on Stackoverflow
Solution 4 - JavalaurentJView Answer on Stackoverflow
Solution 5 - JavaJoeView Answer on Stackoverflow
Solution 6 - JavaVinod VaranasiView Answer on Stackoverflow
Solution 7 - JavaXXXXXView Answer on Stackoverflow