0

I have a basic SpringBoot application that I created using Spring Initializer. When I try to start the SpringBoot server( using the maven plugin (spring-boot:start) it gives the below error.

java.lang.NoClassDefFoundError: org/springframework/web/util/UriTemplateHandler at java.lang.Class.getDeclaredConstructors0(Native Method) ~[na:1.8.0_60] at java.lang.Class.privateGetDeclaredConstructors(Class.java:2671) ~[na:1.8.0_60] at java.lang.Class.getDeclaredConstructors(Class.java:2020) ~[na:1.8.0_60] at org.springframework.boot.context.properties.ConfigurationPropertiesBindConstructorProvider.findConstructorBindingAnnotatedConstructor(ConfigurationPropertiesBindConstructorProvider.java:62) ~[spring-boot-2.2.4.RELEASE.jar:2.2.4.RELEASE] at org.springframework.boot.context.properties.ConfigurationPropertiesBindConstructorProvider.getBindConstructor(ConfigurationPropertiesBindConstructorProvider.java:48) ~[spring-boot-2.2.4.RELEASE.jar:2.2.4.RELEASE] at org.springframework.boot.context.properties.ConfigurationPropertiesBean$BindMethod.forType(ConfigurationPropertiesBean.java:311) ~[spring-boot-2.2.4.RELEASE.jar:2.2.4.RELEASE] at org.springframework.boot.context.properties.ConfigurationPropertiesBeanDefinitionValidator.validate(ConfigurationPropertiesBeanDefinitionValidator.java:63) ~[spring-boot-2.2.4.RELEASE.jar:2.2.4.RELEASE] at org.springframework.boot.context.properties.ConfigurationPropertiesBeanDefinitionValidator.postProcessBeanFactory(ConfigurationPropertiesBeanDefinitionValidator.java:45) ~[spring-boot-2.2.4.RELEASE.jar:2.2.4.RELEASE] at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:286) ~[spring-context-5.2.3.RELEASE.jar:5.2.3.RELEASE] at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:174) ~[spring-context-5.2.3.RELEASE.jar:5.2.3.RELEASE]

Here is is my pom file.

    <?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.4.RELEASE</version>
        <relativePath/>
    </parent>
    <groupId>com.cgtm</groupId>
    <artifactId>validator</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>validator</name>
    <description>Validator</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

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

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>4.1.6.RELEASE</version>
        </dependency>


        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.2</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

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

</project>

Application.java file

 package com.cgtm.validator;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class ValidatorApplication {

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

}
ljs
  • 495
  • 1
  • 8
  • 23
  • Are you running on `eclipse`? – Jonathan JOhx Jan 27 '20 at 04:10
  • If you are running on eclipse then Open the project's properties (e.g., right-click on the project's name in the project explorer and select "Properties"). Select "Deployment Assembly". Click the "Add..." button on the right margin. Select "Java Build Path Entries" from the menu of Directive Type and click "Next". Select "Maven Dependencies" from the Java Build Path Entries menu and click "Finish". You should see "Maven Dependencies" added to the Web Deployment Assembly definition. – Jonathan JOhx Jan 27 '20 at 04:11

1 Answers1

1

Spring boot is of version 2.2.4 it requires Spring 5 (basically it comes with a predefined version of spring

On the other hand you're using "hardcoded" spring web 4.1.4 which is wrong:

 <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>4.1.6.RELEASE</version>
 </dependency>

You should be using instead of that:

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

Make sure you don't have any of spring 4.x dependencies on your path (by running mvn dependency:tree)

In addition, you don't need to place:

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

And one last thing, you're using lombok which is fine of course (I mean spring can play nicely with lombok), but spring boot maven plugin will still package it into the artifact despite the provided scope. If you wish to exclude it from the final artifact, you'll have to configure the spring boot maven plugin itself to do so.

Read this SO thread for more information

Mark Bramnik
  • 39,963
  • 4
  • 57
  • 97