What does spring-boot-starter-parent exactly do in pom file?
Asked Answered
R

5

17

I'm developing a project which is not Spring boot but also spring mvc. I mean I don't have this class for example in my project:

@SpringBootApplication
public class Application extends SpringBootServletInitializer {

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

I have these three classes for configuration file of spring mvc:

@Import(WebSocketConfig.class)
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "......")

public class MainConfiguration extends WebMvcConfigurerAdapter {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/Content/**")
                .addResourceLocations("/Content/");
        registry.addResourceHandler("/Scripts/**")
                .addResourceLocations("/Scripts/");


    }

    @Bean
    public InternalResourceViewResolver viewResolver() {
        InternalResourceViewResolver viewResolver
                = new InternalResourceViewResolver();
        viewResolver.setPrefix("/");
        viewResolver.setSuffix(".jsp");
        return viewResolver;
    }

}

Second:

public class MainInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
    public static HashMap<String, String> response_code = new HashMap<String, String>();


    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[] { MainConfiguration.class,
        WebSocketConfig.class};
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return null;
    }

    @Override
    protected String[] getServletMappings() {
        return new String[] { "/" };
    }

    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        super.onStartup(servletContext);
        Security.addProvider(new BouncyCastleProvider());
        servletContext.addListener(new MainContextListener());
        System.out.println("MainInitializer.onStartup()");
}}

Third,

public class MainContextListener implements ServletContextListener {

    public void contextInitialized(ServletContextEvent servletContextEvent) {
        System.out.println("Context Initialized");
        Security.addProvider(new BouncyCastleProvider());
    }

    public void contextDestroyed(ServletContextEvent servletContextEvent) {
        System.out.println("Shutting down!");
    }
}

There is a controller and jsp file and I've configured it to run on tomcat webserver, something is strange for me is that when I add this snippet of code to my pom, index.jsp will appear in browser exactly but when I remove it , it gives 404 not found url for my controller. why is it that even my project is not a spring boot project need spring boot starter parent? I thought below code is related to spring boot and since my project is not spring boot but spring mvc, doesn't need it. but it has problem without this code added in pom:

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.1.RELEASE</version>
    </parent>
Regolith answered 9/4, 2017 at 9:12 Comment(0)
L
7

Spring Boot provides a number of “Starters” that let you add jars to your classpath. For ex. spring-boot-starter-security,spring-boot-starter-web etc. The "spring-boot-starter-parent" is a special starter that provides useful Maven defaults i.e it adds all the required jars and other things automatically. It also provides a dependency-management section so that you can omit version tags for dependencies you are using in pom.xml. For ex. suppose you want to create web application with spring boot so you need to add the following.

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

Now note here that tag is omitted. So ultimately the "spring-boot-starter-parent" adds so many things by default so we no need to worry about those things.

Lehrer answered 1/6, 2018 at 5:38 Comment(1)
my question is that my project is not a spring boot project. but when I remove spring-boot-starter-parent from dependencies, index.jsp give 404 error. why is it that?Regolith
M
5

EDIT: Please also refer official documentation

https://docs.spring.io/spring-boot/docs/current/reference/html/getting-started.html#getting-started.first-application.dependencies

It provides place for common configuration for CHILD POMs. for e.g.

Dependencies & Properties

For e.g. Here is the parent POM configuration 1.4.2.RELEASE spring-boot-dependencies which is parent of spring-boot-starter-parent

<properties>
    <activemq.version>5.13.4</activemq.version>
    <antlr2.version>2.7.7</antlr2.version>
    <appengine.version>1.9.44</appengine.version>
    <artemis.version>1.3.0</artemis.version>
    <aspectj.version>1.8.9</aspectj.version>
    <assertj.version>2.5.0</assertj.version>
    <atomikos.version>3.9.3</atomikos.version>
    <bitronix.version>2.1.4</bitronix.version>
    <caffeine.version>2.3.4</caffeine.version>

common properties for child POMs

<dependencyManagement>
    <dependencies>
        <!-- Spring Boot -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot</artifactId>
            <version>1.4.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot</artifactId>
            <type>test-jar</type>
            <version>1.4.2.RELEASE</version>
        </dependency>
        <dependency>

common dependencies for childs

Mchail answered 10/4, 2017 at 8:5 Comment(0)
C
1

If you can provide more informations, about your pom integrality, we can look further to understand and help you more.

In the other hand, the parent pom spring-boot-starter-parent, contains the full dependencies(mvc, cache, jpa) and commons properties to maintain dependencies versions in a good consistency, to be used in your project or/and submodules.

Basically, you can add some starters in your pom.xml depending on your need (web, jpa, batch....) For your example, you can just add a starter mvc to your pom.xml without adding other dependencies, so your pom.xml can just be like that :

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

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

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


<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>
Contemporaneous answered 26/12, 2017 at 10:44 Comment(0)
S
0

Main feature of spring-boot-starter-parent for me is that it provides compatible versions of dependencies.

It is hard to say what happens without full pom, but as I can suppose you have some conflict in dependencies within your pom, and it is fixed by adding spring-boot-starter-parent.

Sluiter answered 17/5, 2023 at 8:52 Comment(1)
Your answer could be improved with additional supporting information. Please edit to add further details, such as citations or documentation, so that others can confirm that your answer is correct. You can find more information on how to write good answers in the help center.Parish
N
0

The spring-boot-starter-parent project is designed as a unique starter project, offering preset configurations and a comprehensive dependency tree for our application. It ensures all dependencies are version-compatible, eliminating the need for us to manually specify versions.

And in future suppose you want to change your spring boot version , you just need to change the version in parent version and rest all dependencies automatically downloaded.

Negligence answered 19/6 at 11:3 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.