Maven / Gradle 之Spring-Boot入门

Spring Boot是Spring 产品下的一个子项目,致力于快速便捷的搭建基于Spring的独立可运行的项目。

Spring Boot 项目是带嵌入式tomcat 功能

一:Maven项目
创建Maven项目就会自动生成一个配置文件pom.xml文件,项目所需要的依赖可以写在这个文件中 。

<?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">
    <modelVersion>4.0.0</modelVersion>

    <groupId>con.spring</groupId>
    <artifactId>Spring-Boot</artifactId>
    <version>1.0-SNAPSHOT</version>

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

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.version>1.8</java.version>
    </properties>

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

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


</project>

如果不想继spring-boot-starter-parent项目,也可以使用依赖管理来引入spring-boot的依赖:

<dependencyManagement>
     <dependencies>
        <dependency>
            <!-- Import dependency management from Spring Boot -->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>1.3.2.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

创建类文件,写入如下代码:

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

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
public class Application {

  @RequestMapping("/")
  String home() {
    return "Hello World!";
  }

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

说明:

  • @RestController和@RequestMapping注解是Spring MVC注解(它们不是Spring Boot的特定部分)。具体查看Spring参考文档的MVC章节

  • @EnableAutoConfiguration。这个注解告诉Spring Boot根据添加的jar依赖猜测你想如何配置Spring。由于spring-boot-starter-web添加了Tomcat和Spring MVC,所以auto-configuration将假定你正在开发一个web应用并相应地对Spring进行设置。

  • main方法通过调用run,将业务委托给了Spring Boot的SpringApplication类。SpringApplication将引导我们的应用,启动Spring,相应地启动被自动配置的Tomcat web服务器。

使用mvn命令之前,需要安装Maven : brew install maven

如果你的 pom.xml 使用了 spring-boot-starter-parent,则我们可以运行 :

$ mvn spring-boot:run

然后,使用浏览器打开 http://localhost:8080/ 你会看到下面的输出:

Hello World!
点击ctrl-c,可以关闭应用程序。

如果你的 pom.xml 中添加了 spring-boot-maven-plugin 插件,你可以运行:

$  mvn clean  package   // 命令在 target 目录生成一个可执行的 jar 文件
$ java -jar target/spring-boot-example-0.0.1-SNAPSHOT.jar   //可以运行项目命令执行生成的 jar 文件:

命令启动应用:
使用Maven 编译项目的Spring-Boot应用的三种启动方式

二:Gradle项目

Gradle 是什么?

Gradle 吸纳了 ant 灵活的脚本特性、Maven 丰富的依赖管理策略和强大的插件式环境。

创建Gradle项目会自动生成一个build.gradle配置文件,项目所需要的依赖可以写在这个文件中. 因为自动生成的内容是不够的,故需要手动添加一些内容。

group 'com.test.gradle'
version '1.0-SNAPSHOT'
buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:1.5.2.RELEASE")
    }
}
apply plugin: 'java' // 引入java插件,使得能够用gradle build命令
apply plugin: 'org.springframework.boot'
sourceCompatibility = 1.8
targetCompatibility = 1.8
repositories {
    mavenCentral()
}
dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
}
dependencies {
    compile("org.springframework.boot:spring-boot-starter-web")
    testCompile("org.springframework.boot:spring-boot-starter-test")
}

使用Gradle编译运行项目:

$ gradle build  
$ gradle bootrun
使用Gradle Wrapper

对于Gradle项目来说,使用Gradle Wrapper是非常推荐的,它其实是一个gradle包,使用它的好处:

  • 不用安装gradle也能运行gradle
  • 所有人使用相同的gradle版本
    使用Gradle Wrapper需要在build.gradle配置文件中加入:
task wrapper(type: Wrapper) {
    gradleVersion = '3.0'
}

然后在命令行运行:

gradle wrapper

此时会生成以下三个文件(夹):gradlew、gradlew.bat和gradle目录
这里的gradlew和gradlew.bat其实只是脚本文件(前者用于Unix/Linux/Mac,后者用于Windows),在使用gradle命令的地方替换为gradlew或gradlew.bat,他们将自动下载指定的gradle版本,然后用该版本进行项目构建。如上文所示,本文中我们配置gradle版本为3.0。
请注意,这三个文件(夹)都需要提交到代码库中。
安利一个表格:

《Maven / Gradle 之Spring-Boot入门》

gradle 文件夹

《Maven / Gradle 之Spring-Boot入门》

定义:用于保存 gradle 下载路径的配置文件位置,用于没有gradle环境的环境初始化使用

gradle-wrapper.propertes      //gradle-wrapper 配置文件
gradle-wrapper.jar            //gradle-wrapper 核心 jar

gradle-wrapper.propertes中内容,打开该配置文件

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip

distributionUrl 是要下载的 gradle 的地址,使用哪个版本的 gradle,就在这里修改。
gradle 有 3 种版本:

  • gradle-xx-all.zip 是完整版,包含了各种二进制文件,源代码文件,和离线的文档。
  • gradle-xx-bin.zip 是二进制版,只包含了二进制文件(可执行文件),没有文档和源代码。
  • gradle-xx-src.zip 是源码版,只包含了 Gradle 源代码,不能用来编译你的工程。

结论:如果只是为了编译,可以不用完整版,只需要二进制版即可,例如,gradle-2.14.1-bin.zip。

zipStoreBase 和 zipStorePath 组合在一起,是下载的 gradle-2.14.1-all.zip 所存放的位置。
zipStorePath 是 zipStoreBase 指定的目录下的子目录。

distributionBase 和 distributionPath 组合在一起,是解压 gradle-2.14.1-all.zip 之后的文件的存放位置。
distributionPath 是 distributionBase 指定的目录下的子目录。

下载位置可以和解压位置不一样。

zipStoreBase 和distributionBase 有两种取值:GRADLE_USER_HOME 和 PROJECT。
其中,GRADLE_USER_HOME 表示用户目录。
在 windows 下是 %USERPROFILE%/.gradle,例如C:\Users<user_name>.gradle\。
在 Linux下是 $HOME/.gradle,例如~/.gradle。

PROJECT 表示工程的当前目录,即 gradlew 所在的目录。

当项目其他人拿到代码之后,由于gradlew和gradlew.bat文件均在项目源代码中,他们本地即便没有gradle,依然可以通过以下命令进行项目构建:

./gradlew build

如果你的项目有持续集成(CI)服务器(你也应该有),那么你的CI机器也没有必要安装Gradle了。另外,此时所有人都是使用的相同版本的gradle,进而避免了由于版本不同所带来的问题。

在项目根目录下启动运行项目:

$ gradle clean bootrun

参考链接

调试

至少有两种方式可以对Spring Boot项目进行调试。一种是直接运行命令:

./gradlew bootRun --debug-jvm

此时程序将默认监听5005端口,并暂停以等待调试客户端的连接,然后启动Spring Boot。

另一种方式是使用Gradle的Application插件,在build.gradle中添加:

说了这么多
在使用 idea 创建 gradle或者 maven 项目时,需要输入GroupId, ArtifactId, 那它们表示什么意思呢?
GroupId: 是项目组织结构唯一的标识符,实际对应JAVA的包的结构, 一般是:com.info.test.这样
ArtifactId: 是项目的唯一的标识符,实际对应项目的名称,就是项目根目录的名称

举个例子:

groupid和artifactId被统称为“坐标”,是为了保证项目唯一性而提出的
如果你要把你项目弄到maven本地仓库去,你想要找到你的项目就必须根据这两个id去查找

groupId一般分为多个段
这里我只说两段,第一段为域,第二段为公司名称。
域又分为org、com、cn等等许多,其中org为非营利组织,com为商业组织
举个apache公司的tomcat项目例子:这个项目的groupId是org.apache,它的域是org(因为tomcat是非营利项目),公司名称是apache,artigactId是tomcat。

又比如创建一个项目,一般会将:
groupId设置为cn.xxx,cn表示域为中国,xxx是我个人姓名缩写
artifactId设置为testProj,表示你这个项目的名称是testProj,依照这个设置,项目包结构最好是cn.snowin.testProj打头的

buildscript 中的内容和外面内容区别?
buildscript {
    repositories {
        jcenter()
    }
    dependencies {     classpath("org.springframework.boot:spring-boot-gradle-plugin:1.5.2.RELEASE")
    }
}

buildscript 代码块中 :
repositories 的内容
dependencies 的内容
buildscript 里是 gradle 脚本自身执行所需的资源,包括:依赖项,第三方插件,maven 仓库地址等

在build.gradle文件中直接声明(在buildscript 之外)的依赖项、仓库地址等信息是项目自身需要的依赖资源

gradle在执行脚本时,会优先执行buildscript代码块中的内容,然后才会执行剩余的build脚本
还有就是在buildscript代码块中你可以对dependencies使用classpath声明。该classpath声明说明了在执行其余的build脚本时,class loader可以使用这些你提供的依赖项

gradle 中的JCenter() 和mavenCenter() 区别?

jcenter() 和mavenCentral() 都是依赖组件仓库
我们可以看到一般都是这样用的:

repositories {
    mavenCentral()    
// maven中央仓库(http://repo1.maven.org/maven2/)是由Sonatype公司提供的服务
它是Apache Maven、SBT和其他构建系统的默认仓库,并能很容易被Apache Ant/Ivy、Gradle和其他工具所使用
可在http://search.maven.org/查询构件。
}

repositories {
//是由JFrog公司提供的Bintray中的Java仓库。它是当前世界上最大的Java和Android开源软件构件仓库。
     jenter()
 }

JCenter相比mavenCenter构件更多,性能也更好。但还是有些构件仅存在mavenCenter中。

checkstyle

CheckStyle是一种静态代码检查工具,主要用于检查代码风格或格式是否满足要求。首先,我们需要一份配置文件来配置这样的要求,这里我们采用Google的Checkstyle配置文件。

在biuld.gradle中增加checkstyle插件:

apply plugin: 'checkstyle'

下载Google的checkstyle文件并将其拷贝为config/checkstyle/checkstyle.xml,Gradle的checkstyle插件默认将读取该配置文件。

《Maven / Gradle 之Spring-Boot入门》

默认 CheckStyle 检查将包含在./gradlew build中。

Checkstyle 插件向 project 中添加了以下 tasks:

《Maven / Gradle 之Spring-Boot入门》

《Maven / Gradle 之Spring-Boot入门》

所以可以执行如下命令去做代码检查:

gradle check

gradle checkstyleMain

运行Spring-boot踩过的坑

运行gradle build总是会出现构建失败,其原因基本是:

默认的8080端口被占用

    原文作者:吧啦啦小汤圆
    原文地址: https://www.jianshu.com/p/44e748bd93cb
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞