71

Hi friends i am developing a spring boot maven based project and and i have created a maven submodules but when i try to run my project it gives an error

[ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:1.2.5.RELEASE:run (default-cli) on project demo-jhipster: Unable to find a suitable main class, please add a 'mainClass' property -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:1.2.5.RELEASE:run (default-cli) on project demo-jhipster: Unable to find a suitable main class, please add a 'mainClass' property
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:216)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)
        at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
        at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:120)
        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:355)
        at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:155)
        at org.apache.maven.cli.MavenCli.execute(MavenCli.java:584)
        at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:216)
        at org.apache.maven.cli.MavenCli.main(MavenCli.java:160)

my parent pom and child pom is

<?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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>

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

    <groupId>com.aquevix.demo</groupId>
    <artifactId>demo-jhipster</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>

    <name>demo_jhipster</name>

    <prerequisites>
        <maven>3.0.0</maven>
    </prerequisites>
    <modules>
        <module>JhipsterSubmodule</module>
    </modules>

    <properties>
        <assertj-core.version>3.1.0</assertj-core.version>
        <awaitility.version>1.4.0</awaitility.version>
        <commons-io.version>2.4</commons-io.version>
        <commons-lang.version>2.6</commons-lang.version>
        <gatling-maven-plugin.version>2.1.6</gatling-maven-plugin.version>
        <gatling.version>2.1.6</gatling.version>
        <hibernate.version>4.3.10.Final</hibernate.version>
        <hikaricp.version>2.4.0</hikaricp.version>
        <jacoco-maven-plugin.version>0.7.4.201502262128</jacoco-maven-plugin.version>
        <java.version>1.8</java.version>
        <javax.inject.version>1</javax.inject.version>
        <joda-time-hibernate.version>1.4</joda-time-hibernate.version>
        <liquibase-hibernate4.version>3.5</liquibase-hibernate4.version>
        <liquibase-slf4j.version>1.2.1</liquibase-slf4j.version>
        <liquibase.version>3.4.1</liquibase.version>
        <mapstruct.version>1.0.0.CR1</mapstruct.version>
        <maven-enforcer-plugin.version>1.3.1</maven-enforcer-plugin.version>
        <maven-sortpom-plugin.version>2.3.0</maven-sortpom-plugin.version>
        <maven.build.timestamp.format>yyyyMMddHHmmss</maven.build.timestamp.format>
        <maven.compiler.source>${java.version}</maven.compiler.source>
        <maven.compiler.target>${java.version}</maven.compiler.target>
        <metrics-spark-reporter.version>1.2</metrics-spark-reporter.version>
        <metrics-spring.version>3.1.2</metrics-spring.version>
        <!-- Sonar properties -->
        <project.testresult.directory>${project.build.directory}/test-results</project.testresult.directory>
        <run.addResources>false</run.addResources>
        <sonar-maven-plugin.version>2.6</sonar-maven-plugin.version>
        <sonar.exclusions>src/main/webapp/assets/**/*.*, src/main/webapp/bower_components/**/*.*, src/main/webapp/dist/**/*.*</sonar.exclusions>
        <sonar.jacoco.itReportPath>${project.testresult.directory}/coverage/jacoco/jacoco-it.exec</sonar.jacoco.itReportPath>
        <sonar.jacoco.reportPath>${project.testresult.directory}/coverage/jacoco/jacoco.exec</sonar.jacoco.reportPath>
        <sonar.java.codeCoveragePlugin>jacoco</sonar.java.codeCoveragePlugin>

        <sonar.javascript.jstestdriver.reportsPath>${project.testresult.directory}/karma</sonar.javascript.jstestdriver.reportsPath>
        <sonar.javascript.lcov.reportPath>${project.testresult.directory}/coverage/report-lcov/lcov.info</sonar.javascript.lcov.reportPath>

        <sonar.sources>${project.basedir}/src/main/</sonar.sources>
        <sonar.surefire.reportsPath>${project.testresult.directory}/surefire-reports</sonar.surefire.reportsPath>
        <sonar.tests>${project.basedir}/src/test/</sonar.tests>
        <spring-security.version>4.0.2.RELEASE</spring-security.version>
        <springfox.version>2.0.3</springfox.version>
        <usertype-core.version>4.0.0.GA</usertype-core.version>

    </properties>

    <dependencies>
        // dependencies..
    </dependencies>
    <build>
        <resources>
            <resource>
                <filtering>true</filtering>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
            <resource>
                <filtering>false</filtering>
                <directory>src/main/resources</directory>
                <excludes>
                    <exclude>**/*.xml</exclude>
                </excludes>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <groupId>com.google.code.sortpom</groupId>
                <artifactId>maven-sortpom-plugin</artifactId>
                <version>${maven-sortpom-plugin.version}</version>
                <executions>
                    <execution>
                        <phase>verify</phase>
                        <goals>
                            <goal>sort</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <sortProperties>true</sortProperties>
                    <nrOfIndentSpace>4</nrOfIndentSpace>
                    <sortDependencies>groupId,artifactId</sortDependencies>
                    <sortPlugins>groupId,artifactId</sortPlugins>
                    <keepBlankLines>true</keepBlankLines>
                    <expandEmptyElements>false</expandEmptyElements>
                </configuration>
            </plugin>
            <plugin>
                <groupId>io.gatling</groupId>
                <artifactId>gatling-maven-plugin</artifactId>
                <version>${gatling-maven-plugin.version}</version>
                <configuration>
                    <configFolder>src/test/gatling/conf</configFolder>
                    <dataFolder>src/test/gatling/data</dataFolder>
                    <resultsFolder>target/gatling/results</resultsFolder>
                    <bodiesFolder>src/test/gatling/bodies</bodiesFolder>
                    <simulationsFolder>src/test/gatling/simulations</simulationsFolder>
                    <!-- This will force Gatling to ask which simulation to run
                      This is useful when you have multiple simulations -->
                    <simulationClass>*</simulationClass>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-eclipse-plugin</artifactId>
                <configuration>
                    <downloadSources>true</downloadSources>
                    <downloadJavadocs>true</downloadJavadocs>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-enforcer-plugin</artifactId>
                <version>${maven-enforcer-plugin.version}</version>
                <executions>
                    <execution>
                        <id>enforce-versions</id>
                        <goals>
                            <goal>enforce</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <rules>
                        <requireMavenVersion>
                            <message>You are running an older version of Maven. JHipster requires at least Maven 3.0</message>
                            <version>[3.0.0,)</version>
                        </requireMavenVersion>
                        <requireJavaVersion>
                            <message>You are running an older version of Java. JHipster requires at least JDK ${java.version}</message>
                            <version>[${java.version}.0,)</version>
                        </requireJavaVersion>
                    </rules>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <argLine>-Xmx256m ${surefireArgLine}</argLine>
                    <!-- Force alphabetical order to have a reproducible build -->
                    <runOrder>alphabetical</runOrder>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <configuration>
                    <packagingExcludes>WEB-INF/lib/tomcat-*.jar</packagingExcludes>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.bsc.maven</groupId>
                <artifactId>maven-processor-plugin</artifactId>
                <version>2.2.4</version>
                <executions>
                    <execution>
                        <id>process</id>
                        <phase>generate-sources</phase>
                        <goals>
                            <goal>process</goal>
                        </goals>
                    </execution>
                </executions>
                <dependencies>
                    <dependency>
                        <groupId>org.mapstruct</groupId>
                        <artifactId>mapstruct-processor</artifactId>
                        <version>${mapstruct.version}</version>
                    </dependency>
                </dependencies>
                <configuration>
                    <defaultOutputDirectory>${project.build.directory}/generated-sources</defaultOutputDirectory>
                    <processors>
                        <processor>org.mapstruct.ap.MappingProcessor</processor>
                    </processors>
                    <options>
                        <mapstruct.suppressGeneratorTimestamp>true</mapstruct.suppressGeneratorTimestamp>
                        <mapstruct.defaultComponentModel>spring</mapstruct.defaultComponentModel>
                    </options>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>sonar-maven-plugin</artifactId>
                <version>${sonar-maven-plugin.version}</version>
            </plugin>
            <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>${jacoco-maven-plugin.version}</version>
                <executions>
                    <execution>
                        <id>pre-unit-tests</id>
                        <goals>
                            <goal>prepare-agent</goal>
                        </goals>
                        <configuration>
                            <!-- Sets the path to the file which contains the execution data. -->
                            <destFile>${project.testresult.directory}/coverage/jacoco/jacoco.exec</destFile>
                            <!-- Sets the name of the property containing the settings for JaCoCo runtime agent. -->
                            <propertyName>surefireArgLine</propertyName>
                        </configuration>
                    </execution>
                    <!-- Ensures that the code coverage report for unit tests is created after unit tests have been run -->
                    <execution>
                        <id>post-unit-test</id>
                        <phase>test</phase>
                        <goals>
                            <goal>report</goal>
                        </goals>
                        <configuration>
                            <dataFile>${project.testresult.directory}/coverage/jacoco/jacoco.exec</dataFile>
                            <outputDirectory>${project.testresult.directory}/coverage/jacoco</outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.liquibase</groupId>
                <artifactId>liquibase-maven-plugin</artifactId>
                <version>${liquibase.version}</version>
                <dependencies>
                    <dependency>
                        <groupId>org.javassist</groupId>
                        <artifactId>javassist</artifactId>
                        <version>3.18.2-GA</version>
                    </dependency>
                    <dependency>
                        <groupId>org.liquibase.ext</groupId>
                        <artifactId>liquibase-hibernate4</artifactId>
                        <version>${liquibase-hibernate4.version}</version>
                    </dependency>
                    <dependency>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-starter-data-jpa</artifactId>
                        <version>${project.parent.version}</version>
                    </dependency>
                </dependencies>
                <configuration>
                    <changeLogFile>src/main/resources/config/liquibase/master.xml</changeLogFile>
                    <diffChangeLogFile>src/main/resources/config/liquibase/changelog/${maven.build.timestamp}_changelog.xml</diffChangeLogFile>
                    <driver />
                    <url />
                    <defaultSchemaName />
                    <username />
                    <password />
                    <referenceUrl>hibernate:spring:com.aquevix.demo.domain?dialect=</referenceUrl>
                    <verbose>true</verbose>
                    <logging>debug</logging>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <jvmArguments>-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005</jvmArguments>
                    <arguments>
                        <argument>--spring.profiles.active=dev</argument>
                    </arguments>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <profiles>
        <profile>
            <id>dev</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <!-- log configuration -->
                <logback.loglevel>DEBUG</logback.loglevel>
            </properties>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                </dependency>
            </dependencies>
        </profile>
        <profile>
            <id>fast</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-maven-plugin</artifactId>
                        <configuration>
                            <arguments>
                                <argument>--spring.profiles.active=dev,fast</argument>
                            </arguments>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
            <properties>
                <!-- log configuration -->
                <logback.loglevel>DEBUG</logback.loglevel>
            </properties>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-undertow</artifactId>
                </dependency>
            </dependencies>
        </profile>
        <profile>
            <id>prod</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>com.github.trecloux</groupId>
                        <artifactId>yeoman-maven-plugin</artifactId>
                        <version>0.4</version>
                        <executions>
                            <execution>
                                <id>run-frontend-build</id>
                                <phase>generate-resources</phase>
                                <goals>
                                    <goal>build</goal>
                                </goals>
                                <configuration>
                                    <buildTool>grunt</buildTool>
                                    <buildArgs>build --force --no-color</buildArgs>
                                </configuration>
                            </execution>
                        </executions>
                        <configuration>
                            <yeomanProjectDirectory>${project.basedir}</yeomanProjectDirectory>
                        </configuration>
                    </plugin>
                    <plugin>
                        <artifactId>maven-clean-plugin</artifactId>
                        <version>2.5</version>
                        <configuration>
                            <filesets>
                                <fileset>                                       <directory>src/main/webapp/dist</directory>
                                </fileset>
                                <fileset>
                                    <directory>.tmp</directory>
                                </fileset>
                                <fileset>
                                    <directory>node_modules</directory>
                                </fileset>
                            </filesets>
                        </configuration>
                    </plugin>
                    <plugin>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-maven-plugin</artifactId>
                        <configuration>
                            <arguments>
                                <argument>--spring.profiles.active=prod</argument>
                            </arguments>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
            <properties>
                <!-- log configuration -->
                <logback.loglevel>INFO</logback.loglevel>
            </properties>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                </dependency>
            </dependencies>
        </profile>
    </profiles>
</project>

and chile pom is

<?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>
    <parent>
        <artifactId>demo-jhipster</artifactId>
        <groupId>com.aquevix.demo</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <artifactId>JhipsterSubmodule1</artifactId>
</project>

I have googled but not found any solution please help in this regard!

enter image description here

Qasim
  • 9,058
  • 8
  • 36
  • 50

21 Answers21

59

In my case I had in main pom:

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

which includes plugin spring-boot-maven-plugin.

I had to add to main pom to skip it:

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <skip>true</skip>
    </configuration>
</plugin>

and then in module with ma Application class:

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <skip>false</skip>
    </configuration>
</plugin>
kometen
  • 6,536
  • 6
  • 41
  • 51
ajasiocha
  • 591
  • 4
  • 2
  • Wow I can't believed this worked after hours of debugging. But why does it work lol? And is there a shorter method now to configure this after 5 years? – takanuva15 Jul 31 '23 at 18:53
49

I believe the issue I was having is similar to yours. I have a multi module app using Spring Boot and only one Application.java (with main method).

I was struggling with it trying to start it up using Maven and I got the same result as yours (unable to find a suitable main class).

I spent several hours trying and changing stuff and after adding the property mainClass to the pom, it couldn't find it.

Then I decided to run the project not from the root project but from the project where the Application class is.

By doing this I was able to start up Spring Boot and everything works like a charm.

Updated

If you want to package the whole thing to be executed with java -jar file you can run the command below from the root project:

mvn clean package spring-boot:repackage 

Don't forget to add the spring-boot-maven-plugin to your pom.

halfer
  • 19,824
  • 17
  • 99
  • 186
Paulo Pedroso
  • 3,555
  • 2
  • 29
  • 34
24

Remove the maven build plugin code from the parent pom, which will be similar to the below, the below snippet should be only in the sub module pom where you have main class for spring boot application:

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>
kometen
  • 6,536
  • 6
  • 41
  • 51
Syed Siraj Uddin
  • 583
  • 1
  • 5
  • 13
16

I solved this by two steps:

  1. In the parent module folder, run mvn install
  2. Go to the sub module folder which contains the mainClass you need, run mvn clean spring-boot:start
Happypig375
  • 1,022
  • 1
  • 12
  • 32
Yuebing Cao
  • 173
  • 1
  • 4
  • 1
    Can you please clarify lthe steps of running the module? Other newbies might not know how. – Happypig375 Nov 27 '18 at 15:03
  • 1. in the parent module folder, run `mvn install` 2. go to the sub module folder which contains the mainClass you need, run `mvn clean spring-boot:start` – Yuebing Cao Dec 16 '18 at 08:44
  • 1
    This worked for me... however, is there no way we can get the application to run from the project root directory instead of the submodule directory? – eftshift0 Nov 26 '19 at 04:02
7

Maybe you forgot to specify the main class to start.

In pom.xml:

<properties>
    <start-class>com.ishanitech.controller.Application</start-class>
</properties>
orog
  • 89
  • 1
  • 2
5

If you are using IntellJ IDEA, maybe you can do it like this:

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <mainClass>add.your.main.class.application.reference.here</mainClass>
    </configuration>
</plugin>

This solved my error.

t j
  • 7,026
  • 12
  • 46
  • 66
gnnExplorer
  • 113
  • 1
  • 2
  • 12
4

Do you have a class in your app with a main method like:

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

Or do you even have multiple classes with main methods, in which case Spring can't figure out which one to use?

Dennis Hunziker
  • 1,293
  • 10
  • 19
  • Hi @Dennis thnx for replying... i am updating my question with pic showing structure of my project i want to know how to execute main class i.e spring boot application class of child module(webapp1) from parent directory. if i try to run it from webapp1 directory it is running but i am not able to execute the url show 404 error so i think if i run it from parent directory then it should not be a problem so can you help me to execute webapp1 main class from parent directory – Qasim Sep 04 '15 at 06:15
4
mvn clean spring-boot:start

…will give you the same error.

mvn clean package spring-boot:start

…is going to fix the issue by building the artifact before running sprint-boot:start.

Alex
  • 8,245
  • 8
  • 46
  • 55
2

If you don't want to create a fat jar, you can add follow lines in your pom.xml:

<properties>
    <spring-boot.repackage.skip>true</spring-boot.repackage.skip>
</properties>
Mikhail
  • 1,961
  • 1
  • 7
  • 4
2

The issue is that spring looks for the main class in all modules of a multi module application. If you have a multi-module application just add this to pom.xml of other modules which do not have the main class

<plugin>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-maven-plugin</artifactId>
   <configuration>
     <skip>true</skip>
   </configuration>
</plugin>

And main Class module pom.xml add

<plugin>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-maven-plugin</artifactId>
   <configuration>
     <skip>false</skip>
   </configuration>
</plugin>

Side note: Try to exclude didn't work for me

Emeka
  • 51
  • 1
  • 3
1

The only way that worked is to exactly have these respectively in your parent and module pom.xml:

PARENT:

<build>
        <pluginManagement><!-- lock down plugins versions to avoid using Maven 
                defaults (may be moved to parent pom) -->
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <configuration>
                        <skip>true</skip>
                    </configuration>
                </plugin>
                <!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
                <plugin>
                    <artifactId>maven-clean-plugin</artifactId>
                    <version>3.1.0</version>
                </plugin>
                <!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
                <plugin>
                    <artifactId>maven-resources-plugin</artifactId>
                    <version>3.0.2</version>
                </plugin>
                <plugin>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.8.0</version>
                </plugin>
                <plugin>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>2.22.1</version>
                </plugin>
                <plugin>
                    <artifactId>maven-jar-plugin</artifactId>
                    <version>3.0.2</version>
                </plugin>
                <plugin>
                    <artifactId>maven-install-plugin</artifactId>
                    <version>2.5.2</version>
                </plugin>
                <plugin>
                    <artifactId>maven-deploy-plugin</artifactId>
                    <version>2.8.2</version>
                </plugin>
                <!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
                <plugin>
                    <artifactId>maven-site-plugin</artifactId>
                    <version>3.7.1</version>
                </plugin>
                <plugin>
                    <artifactId>maven-project-info-reports-plugin</artifactId>
                    <version>3.0.0</version>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>

MODULE

<build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <configuration>
                        <fork>true</fork>
                        <skip>false</skip>
                    </configuration>
                    <executions>
                        <execution>
                            <goals>
                                <goal>repackage</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
                <!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
                <plugin>
                    <artifactId>maven-clean-plugin</artifactId>
                    <version>3.1.0</version>
                </plugin>
                <!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
                <plugin>
                    <artifactId>maven-resources-plugin</artifactId>
                    <version>3.0.2</version>
                </plugin>
                <plugin>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.8.0</version>
                </plugin>
                <plugin>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>2.22.1</version>
                </plugin>
                <plugin>
                    <artifactId>maven-jar-plugin</artifactId>
                    <version>3.0.2</version>
                </plugin>
                <plugin>
                    <artifactId>maven-install-plugin</artifactId>
                    <version>2.5.2</version>
                </plugin>
                <plugin>
                    <artifactId>maven-deploy-plugin</artifactId>
                    <version>2.8.2</version>
                </plugin>
                <!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
                <plugin>
                    <artifactId>maven-site-plugin</artifactId>
                    <version>3.7.1</version>
                </plugin>
                <plugin>
                    <artifactId>maven-project-info-reports-plugin</artifactId>
                    <version>3.0.0</version>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>
Adriaan
  • 17,741
  • 7
  • 42
  • 75
Yaffah
  • 31
  • 1
  • Welcome to Stack Overflow! However much excited you may be, please keep the language professional and courteous. – Adriaan Mar 13 '20 at 10:52
1

Use <pluginManagement> tag above the <plugins> tag

 <pluginManagement>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
    </pluginManagement>
Deepanshu
  • 169
  • 6
0

You can fix the problem by specifying the location of main as follows:

mvn spring-boot {com.ishanitech.controller.Application}:run
kometen
  • 6,536
  • 6
  • 41
  • 51
Rabin Pantha
  • 941
  • 9
  • 19
  • 2
    it says no plugin found for prefix '{mypackage}' in the current project and in the plugin groups [org.mortbay.jetty, org.apache.maven.plugins, org.codehaus.mojo]. Do I need to add something else? – Vishnu May 12 '16 at 17:58
  • I have not tried but I hope the answers in this url is certainly going to help you. http://stackoverflow.com/questions/7414075/plugin-not-found-for-prefix-error-in-eclipse – Rabin Pantha May 13 '16 at 12:37
  • I have tried this and it does not work in multi module projects. ` mvnw org.springframework.boot:spring-boot-maven-plugin:2.2.7.RELEASE:run -Dspring-boot.run.main-class=main.class -pl groupId:artifactId -am ` – Delirante Oct 22 '20 at 07:49
  • This does not work. Pantha said "I have not tried [it]". Please do not post answers you haven't tried. – devdanke Feb 01 '22 at 01:26
0

If you are trying to run a mvn spring-boot:run or just a mvn (as you seem to use JHipster and this is the way they wire it as default goal) in the root of your project, it is normal that if fail according that I think it can only be used in a plain spring boot project.

As your parent project seems to have severals Spring-Boot webapps, I guess that each one have their own main() launch class, and that you are just using a parent pom to factorize your poms and be able to package all your applications individually via a single command.

So, in that case, just run a mvn package, and not a mvn nor a mvn spring-boot:run.

Victor Petit
  • 2,632
  • 19
  • 19
0

I have also faced the same problem, but by adding the below line in my pom.xml I resolved the issue for my project:

<properties>
      <start-class>com.hls.om.wp.AgencySearch</start-class>
</properties>

where the AgencySearch class has the main method for running the spring boot application.

Andreas
  • 4,937
  • 2
  • 25
  • 35
Ram
  • 1
0

If you follow the official guides and clone repository to local, then you got to folders, the guides let you cd initial, don't do that, cd complete and there will be no problem.

0

I had the same issue. In my case it was because I had my main class in a package that was not "parent" to my other packages which contained Controllers, Entities, etc. Something like this:

+- com.domain.myapp.app
|  \- Application.java
+- com.domain.myapp.controllers
|  \- AppController.java
+- com.domain.myapp.entities
|  \- AppEntity.java
+- com.domain.myapp.services
|  \- AppService.java
+- com.domain.myapp.repository
|  \- AppRepo.java

The solution was to move my main class to a package which is hierarchily on top of the other packages since Spring Boot automatically searches this package and all sub-packages for classes with @Entity, @Component, @Service, @Repository annotations. The result was something like this:

+- com.domain.myapp
 |  \- Application.java
 |  +- com.domain.myapp.controllers
 |  |  \- AppController.java
 |  +- com.domain.myapp.entities
 |  |  \- AppEntity.java
 |  +- com.domain.myapp.services
 |  |  \- AppService.java
 |  +- com.domain.myapp.repository
 |  |  \- AppRepo.java

Hope it helps!

Regards

0

In my multi-module project, I did a cd into the sub-module and I used Maven's exec:java goal instead of spring-boot:run.

mvn clean package exec:java -Dexec.mainClass="a.b.c.Application"

For me, this was sufficient, but I'm not sure what spring-boot:run does differently.

Alexander Taylor
  • 16,574
  • 14
  • 62
  • 83
0

Just add "sourceDirectory" tag in the build section before the spring-boot-maven-plugin and specify the directory where the main class is located. Don't give the package name!

<build> 
    <sourceDirectory>${project.basedir}/src/main/java</sourceDirectory>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>
Kartik Hegde
  • 51
  • 1
  • 3
-1

I did as following and it resolved

<packaging>war</packaging>
<properties>
    <java.version>1.8</java.version>
    <maven.compiler.target>1.8</maven.compiler.target>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.test.skip>true</maven.test.skip>
</properties>
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
                 <skip>true</skip>
            </configuration>
        </plugin>
    </plugins>
</build>
Parameshwar
  • 856
  • 8
  • 16
-4

The solution is change the pom.xml file

from this

<packaging>pom</packaging>

to this

<packaging>war</packaging>

or another value that you need depending of your deployment method.

  • If you have a multimodule maven project, make sure you run the module that has packaging as war. Your parent module packaging may be pom. – Abubacker Siddik Mar 18 '17 at 17:13