Bransomis Bailout
Bransomis Bailout

Reputation: 81

Spring Boot Maven Plugin not creating executable jar

My POM is as below. But the executable JAR is not being create when I run "mvn clean package". However, when I remove the dependencyManagement element and add spring boot as parent POM, everything works.

What am I missing?

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>sample-boot</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <!-- Import dependency management from Spring Boot -->
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>1.2.0.M2</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

    <repositories>
        <repository>
            <id>spring-snapshots</id>
            <url>http://repo.spring.io/snapshot</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
        <repository>
            <id>spring-milestones</id>
            <url>http://repo.spring.io/milestone</url>
        </repository>
    </repositories>

    <pluginRepositories>
        <pluginRepository>
            <id>spring-snapshots</id>
            <url>http://repo.spring.io/snapshot</url>
        </pluginRepository>
        <pluginRepository>
            <id>spring-milestones</id>
            <url>http://repo.spring.io/milestone</url>
        </pluginRepository>
    </pluginRepositories>

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

Upvotes: 7

Views: 29683

Answers (7)

Tom Chamberlain
Tom Chamberlain

Reputation: 3065

Spring Boot will make sure your application will boot as a test when you run mvn package. Make sure it is not failing during this.

Upvotes: 1

pink spikyhairman
pink spikyhairman

Reputation: 2555

I had been building a runnable JAR (Maven POM) for a project for over a year and recently something changed and the JAR no longer contained any dependency JARs. Eventually, updating to latest Spring boot release (1.5.2.RELEASE for me at the time of writing) resolved the issue.

Upvotes: 0

Anand
Anand

Reputation: 1871

According SpringBoot Document. The plugin rewrites your manifest, and in particular it manages the Main-Class and Start-Class entries, so if the defaults don't work you have to configure those there (not in the jar plugin). The Main-Class in the manifest is actually controlled by the layout property of the boot plugin

SpringBoot Maven-plugin-not-creating-executable-jar

Below changes as per SpringBoot docs worked for me.

    <build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <mainClass>YourSpringBootJavaClass</mainClass>
                <layout>WAR</layout>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
    <finalName>yourwarfileName</finalName>
</build>

Upvotes: 0

Riddhi Gohil
Riddhi Gohil

Reputation: 1818

Given is pom.xml to create an executable jar file

<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 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.executablejar</groupId>
<artifactId>demo</artifactId>
<packaging>jar</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>demo Maven Webapp</name>
<url>http://maven.apache.org</url>

<properties>
    <java-version>1.8</java-version>
    <docker.image.prefix>springDemo</docker.image.prefix>
</properties>

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

<dependencies>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
    </dependency>

    <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-jasper</artifactId>
    </dependency>

</dependencies>

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

To create executable jar, type following command

$ mvn clean
$ mvn install

Watch video : https://youtu.be/Yy8RxjdcTfE

Upvotes: 0

mladirazvijac
mladirazvijac

Reputation: 67

When you using Spring boot dependency management (without spring-boot-starter-parent) you can still keep the benefit of the dependency management, but not the plugin management.

That means that you need to provide full plugin (with version and other stuff).

Upvotes: 2

Piotr Kochański
Piotr Kochański

Reputation: 22672

You need to configure spring-boot-maven-plugin by yourself:

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>1.1.8.RELEASE</version>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

Obviously set your own plugin version. Now if you run mvn install or mvn package you'll have executable JAR generated.

Upvotes: 33

Dave Syer
Dave Syer

Reputation: 58094

That's because the plugin is configured in the parent in the second case. If you want to manage your own plugins (ie not use the parent), you have to explicitly configure the spring boot plugin (and others).

Upvotes: 6

Related Questions