springboot2入门(3-maven相关)

来源:互联网 发布:access数据库管理工具 编辑:程序博客网 时间:2024/05/18 02:45

使用maven构建springboot2项目。

原文:https://docs.spring.io/spring-boot/docs/2.0.0.M5/reference/htmlsingle/#using-boot-build-systems

maven版本:假设使用eclipse4.7,自带maven3.3。

继承parent

可以继承 spring-boot-starter-parent 工程,已获得一些有用的默认设置,比如:

  • Dependency Management:继承了 spring-boot-dependencies POM,帮助你自动设定spring依赖包的 version 。也可以手动指定各个依赖包的版本。 spring-boot v2.m5的默认依赖包的版本可以参考:https://github.com/spring-projects/spring-boot/tree/v2.0.0.M5/spring-boot-project/spring-boot-dependencies/pom.xml
  • jdk编译器compliance级别:1.8
  • source文件编码:utf-8
  • 聪明的resources filtering:开启了对 src/main/resources 目录下的 含有 application 的设定文件(properties/yaml/yml)的filter(maven-resources-plugin)。关于filter进一步可以参考: https://maven.apache.org/plugins/maven-resources-plugin
  • 聪明的plugin 配置(exec-maven-plugin,maven-git-commit-id-plugin,maven-shade-plugin等)

pom.xml写法:

    <!-- Inherit defaults from Spring Boot -->    <parent>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-parent</artifactId>        <version>2.0.0.M5</version>    </parent>
    <!-- override individual dependencies(EX. spring-data-releasetrain) by overriding a property -->    <properties>        <spring-data-releasetrain.version>Fowler-SR2</spring-data-releasetrain.version>    </properties>

不使用继承方式

如果不使用parent,或者必须指定其他的parent的时候,可以利用 dependencyManagement 使用spring boot(scope=import):

    <dependencyManagement>        <dependencies>            <!-- Override jackson-databind provided by Spring Boot (2.9.1) -->            <dependency>                <groupId>com.fasterxml.jackson.core</groupId>                <artifactId>jackson-databind</artifactId>                <version>2.9.0</version>                <type>pom</type>                <scope>import</scope>            </dependency>            <dependency>                <!-- Import dependency management from Spring Boot -->                <groupId>org.springframework.boot</groupId>                <artifactId>spring-boot-dependencies</artifactId>                <version>2.0.0.M5</version>                <type>pom</type>                <scope>import</scope>            </dependency>        </dependencies>    </dependencyManagement>

与继承parent的方式相比,这种方式不支持 Dependency Management ,指定依赖包版本的写法也不一样,但其他方面一样。就是说,需要我们自己指定spring依赖包的版本。
(注:实践发现,这种方式也支持 Dependency Management)

Spring Boot Maven Plugin

这个plugin可以把工程 package 为一个单一可执行的jar包,也可以直接 spring-boot:run 启动工程。

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

如果使用milestone或者snapshot版本,还需要添加:

    <pluginRepositories>        <pluginRepository>            <id>spring-snapshots</id>            <url>http://repo.spring.io/snapshot</url>        </pluginRepository>        <pluginRepository>            <id>spring-milestones</id>            <url>http://repo.spring.io/milestone</url>        </pluginRepository>    </pluginRepositories>

注意:默认我们已经继承了parent。如果没有继承自spring-boot-starter-parent,还需要明确 version
(注:实践发现,利用dependencyManagement 的import方式也支持 Dependency Management)


打包成war :生成可以发布到 独立容器(服务器)中的war文件,需要指定 packaging=war,并且嵌入的容器需要指定scope=provided。

<?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">    <!-- ... -->    <packaging>war</packaging>    <!-- ... -->    <dependencies>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-web</artifactId>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-tomcat</artifactId>            <scope>provided</scope>        </dependency>        <!-- ... -->    </dependencies></project>

注意:这个容器需要支持 Servlet 3.0 规范。如果不支持,需要自己追加web.xml文件,并且通过 DispatcherServlet 载入 ApplicationContext 。这里我们添加新版本的maven。

      <plugin>        <groupId>org.apache.maven.plugins</groupId>        <artifactId>maven-war-plugin</artifactId>        <version>3.2.0</version>      </plugin>

另外,Application 是否需要extends SpringBootServletInitializer,有待于验证。经过验证,不需要处理 扩展 SpringBootServletInitializer

@SpringBootApplicationpublic class Application extends SpringBootServletInitializer {    // 不需要扩展 SpringBootServletInitializer, 此处代码不需要    @Override    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {        return application.sources(Application.class);    }...}

maven spring-boot:run
maven package
均成功。

验证结果:生成war文件,放到tomcat8.0.15下面启动成功,http get成功。验证用的pom.xml:

<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>  <groupId>org.springframework</groupId>  <artifactId>gs-rest-service</artifactId>  <version>0.0.1-SNAPSHOT</version>  <packaging>war</packaging> <!-- 验证1:生成war文件。默认为jar -->  <properties>    <java.version>1.8</java.version>  </properties>  <build>    <plugins>      <plugin>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-maven-plugin</artifactId>      </plugin>      <plugin>  <!-- 验证2:打包成war文件,换成version3.2。默认的version2.2会提示缺少web.xml,可以配置,也可以像这里这样换版本,因为version3之后的默认配置有变化 -->        <groupId>org.apache.maven.plugins</groupId>        <artifactId>maven-war-plugin</artifactId>        <version>3.2.0</version>      </plugin>    </plugins>  </build>  <dependencyManagement> <!-- 验证4:不使用继承parent方式添加依赖 -->    <dependencies>      <!-- Override Spring Data release train provided by Spring Boot -->      <dependency> <!-- 验证3:个别修改依赖包的版本:默认版本2.9.1 -->        <groupId>com.fasterxml.jackson.core</groupId>        <artifactId>jackson-databind</artifactId>        <version>2.9.0</version>        <type>pom</type>        <scope>import</scope>      </dependency>      <dependency>        <!-- Import dependency management from Spring Boot -->        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-dependencies</artifactId>        <version>2.0.0.M5</version>        <type>pom</type>        <scope>import</scope>      </dependency>    </dependencies>  </dependencyManagement>  <dependencies>    <dependency>      <groupId>org.springframework.boot</groupId>      <artifactId>spring-boot-starter-web</artifactId>    </dependency>    <dependency> <!-- 验证5:打包成war,war中不包含容器环境,需要发布到容器环境。默认含有容器环境(tomcat/jetty),可以自启动 -->      <groupId>org.springframework.boot</groupId>      <artifactId>spring-boot-starter-tomcat</artifactId>      <scope>provided</scope>    </dependency>    <dependency>      <groupId>org.springframework.boot</groupId>      <artifactId>spring-boot-starter-test</artifactId>      <scope>test</scope>    </dependency>    <dependency>      <groupId>com.jayway.jsonpath</groupId>      <artifactId>json-path</artifactId>      <scope>test</scope>    </dependency>  </dependencies>  <repositories>    <repository>      <id>spring-milestones</id>      <name>Spring Milestones</name>      <url>https://repo.spring.io/libs-milestone</url>      <snapshots>        <enabled>false</enabled>      </snapshots>    </repository>  </repositories>  <pluginRepositories>    <pluginRepository>      <id>spring-milestones</id>      <name>Spring Milestones</name>      <url>https://repo.spring.io/libs-milestone</url>      <snapshots>        <enabled>false</enabled>      </snapshots>    </pluginRepository>  </pluginRepositories></project>

关于plugin的更多内容,可以参考:https://docs.spring.io/spring-boot/docs/2.0.0.M5/maven-plugin//

以上

原创粉丝点击