SpringBoot no main manifest attribute (maven)

2020-06-08 06:47发布

问题:

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 ?

回答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>


回答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.



回答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);
    }

}


回答4:

You can specify a parent POM eg :

<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