spring-boot-starter-parent在pom文件中做了什么?

时间:2017-04-09 09:12:39

标签: java spring maven spring-mvc spring-boot

我正在开发一个不是Spring boot而且还有spring mvc的项目。我的意思是我在我的项目中没有这个类:

<target name="validateProject" >

    <!-- Execute the project analysis -->
    <script language="javascript" src="${basedir}/Validate.js" />

    <!-- Check if the build must fail or not -->
    <fail if="javascript.fail.message" message="${javascript.fail.message}" />

</target>


<!-- Launch the Js unit tests via local web server -->
<target name="runJsTestsLocalServer">

    <!-- Append all the Js code to the index.js file -->
    <script language="javascript">
        <![CDATA[

            if(project.getProperty("Release.generate") == "true"){

                self.project.executeTarget("runJsTestsAuxConcatFromRelease");

            }else{

                self.project.executeTarget("runJsTestsAuxConcatFromBuild");
            }

        ]]>
    </script>

</target>

我有这三个类用于spring mvc的配置文件:

@SpringBootApplication
public class Application extends SpringBootServletInitializer {

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

第二

@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;
    }

}

第三,

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()");
}}

有一个控制器和jsp文件,我已将其配置为在tomcat webserver上运行,对我来说很奇怪的是,当我将这段代码添加到我的pom时,index.jsp将完全出现在浏览器中但是当我删除它,它为我的控制器提供404找不到的URL。为什么即使我的项目不是春季启动项目需要spring boot starter parent?我认为下面的代码与spring boot相关,因为我的项目不是spring boot而是spring mvc,不需要它。但是如果没有在pom中添加此代码就会出现问题:

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!");
    }
}

3 个答案:

答案 0 :(得分:2)

它为CHILD POM提供了常用配置的位置。 例如。

Dependencies&amp; Properties

e.g. 以下是父POM配置1.4.2.RELEASE spring-boot-dependencies 这是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>

child POM s

的常见属性
<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>

孩子的常见依赖

答案 1 :(得分:1)

如果您可以提供更多信息,例如您的pom完整性,我们可以进一步了解并帮助您。

另一方面,父pom spring-boot-starter-parent包含完整的依赖项(mvc,cache,jpa)和commons属性,以保持良好一致性的依赖项版本,以便在项目中使用或/和子模块。

基本上,你可以根据需要在你的pom.xml中添加一些启动器(web,jpa,batch ....) 对于您的示例,您只需将启动器mvc添加到pom.xml而不添加其他依赖项,因此您的pom.xml可以是这样的:

 <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>

答案 2 :(得分:1)

Spring Boot提供了许多“Starters”,可以让你为你的罐子添加罐子 类路径。对于前者spring-boot-starter-security,spring-boot-starter-web等。 &#34; spring-boot-starter-parent&#34;是一个特殊的启动器,提供有用的 Maven默认,即添加所有必需的罐子和其他东西 自动。它还提供了一个依赖管理部分,以便您 可以省略您在pom.xml中使用的依赖项的版本标记。对于前者 假设您想要使用spring boot创建Web应用程序,那么您需要 添加以下内容。

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

现在请注意,标签被省略了。所以最终 &#34;弹簧引导起动父&#34;默认添加了很多东西,所以我们不必担心这些事情。