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

17,354

Solution 1

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

Solution 2

If you can provide more informations, like your pom integrality, we can look futher to inderstand 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>
Share:
17,354
ShakibaZar
Author by

ShakibaZar

Updated on June 06, 2022

Comments

  • ShakibaZar
    ShakibaZar almost 2 years

    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>