创建项目

1.首先使用mvn命令创建一个基本的Java项目结构

// MyProjectjava
~/Desktop$ mkdir MyProject

// 使mvnjava
~/Desktop/MyProject$ mvn archetype:generate -DgroupId=com.wong -DartifactId=springboot -Dversion=1.0.0 -DinteractiveMode=false

// java,-DartifactId=springbootspringboot
~/Desktop/MyProject$ tree -L 1
.

解释一下创建java项目结构的命令:

  • mvn:maven命令
  • archetype:generate:这是一个Maven插件,原型 archetype 插件是一个Maven项目模板工具包,可以用它创建基本的java项目结构。
  • -DgourpId: 组织名,公司网址的反写 + 项目名称
  • -DartifactId: 项目名(模块名)
  • -Dversion:项目版本号
  • -DinteractiveMode:是否使用交互模式:false不使用,直接创建;true使用,需要根据提示输入相关信息。

温馨小提示:

可以使用​​-DarchetypeArtifactId​​指定ArchetypeId快速创建Java应用,如:

(1)创建一个Java应用:
​​​mvn archetype:generate -DgroupId=com.wong.company -DartifactId=shopingmall -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false​

(2)创建一个Web Project:
​​​mvn archetype:generate -DgroupId=com.wong.company -DartifactId=shopingmall -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false​

2.在pom.xml文件中添加

<project...>
...
<!--spring-boot-starter-parentspring boot starter>maven-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.5.RELEASE</version>
</parent>
<dependencies>
<!--Spring Boot WEB-->
<!--web,SpringBootSpringMVCController-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
...
</dependencies>
</project>

温馨提示

(1)spring-boot-starter-parent是spring boot 的父级依赖,它是一个特殊的starter,用以提供相关的maven默认依赖。关于spring boot 提供了哪些jar包的依赖,可以 ~/.m2/repository/org/springframework/boot/spring-boot-dependencies/2.2.5.RELEASE/spring-boot-dependencies-2.2.5.RELEASE.pom文件。顺便提一下,在linux下每个用户在自己的用户目录下都有一个路径名为 .m2/respository/ 的仓库目录。

如果不想使用spring-boot-dependencies-2.2.5.RELEASE.pom中某个依赖默认的版本,可以在本项目的pom.xml中重新指定版本来覆盖默认的,例如下面。
Spring Data默认版本在spring-boot-dependencies-2.2.5.RELEASE.pom是:

...
<spring-data-releasetrain.version>Moore-SR5</spring-data-releasetrain.version>
...
<properties>
<dependencies>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-releasetrain</artifactId>
<version>${spring-data-releasetrain.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>

那么我们可以在本项目中的pom.xml重新指定版本:

-data-releasetrain.version>Fowler-SR2</spring-data-releasetrain.version>  
</properties>

(2)如果不想继承自spring-boot-starter-parent的POM,即<parent>那里指定不是spring-boot-starter-parent,而是其他的。但是,我们仍然可以通过使用scope = import依赖关系来保持与spring-boot-starter-parent的依赖关系管理,只需要在我们项目的pom.xml中添加:

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

上面我们通过修改属性spring-data-releasetrain.version实现了覆盖默认的版本,但是有时通过修改属性这种方式会存在一个问题,那就是使用这个属性的依赖有很多,我们一改就会全改,但我们并不想其他依赖的版本,那么怎么办呢?其实很简单,就是不要修改属性,直接重新定义依赖。但是需要在spring-boot-dependencies项之前的项目的dependencyManagement中添加一个配置,如要升级到另一个Spring Data版本:

!-- Override Spring Data release train provided by Spring Boot -->  
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-releasetrain</artifactId>
<version>Fowler-SR2</version>
<scope>import</scope>
<type>pom</type>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.2.5.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

(3)起步依赖 spring-boot-starter-xx
Spring Boot提供了很多”开箱即用“的依赖模块,都是以spring-boot-starter-xx作为命名的。起步依赖就是自动给你封装好了你想要实现的功能的依赖。比如我们之前要实现web功能,就需要引入spring-boot-starter-web这个起步依赖。
Spring Boot通过提供众多起步依赖降低项目依赖的复杂度。起步依赖本质上是一个Maven项目对象模型(Project Object Model,POM),定义了对其他库的传递依赖,这些东西加在一起即支持某项功能。很多起步依赖的命名都暗示了它们提供的某种或者某类功能。

SpringBoot Maven插件

这是在spring-boot-dependencies-2.2.5.RELEASE.pom,本项目pom.xml继承的pom中:

.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.2.5.RELEASE</version>
</plugin>
...
</plugins>
</pluginManagement>
</build>

这个插件太重要了,它提供了很多的功能:

  • 把项目打包成一个可执行的超级JAR(uber-JAR),包括把应用程序的所有依赖打入JAR文件内,并为JAR添加一个描述文件,其中的内容能让你用java -jar来运行应用程序。
  • 「重要」搜索public static void main()方法来标记为可运行类

更多SpringBoot Maven插件,请参考《SpringBoot Maven插件》

编制应用入口类

package com.wong;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* Hello world!
*
*/
@SpringBootApplication
public class App
{
public static void main( String[] args )
{
SpringApplication.run(App.class,args);
}
}
  • @SpringBootApplication:是Sprnig Boot项目的核心注解,主要目的是开启自动配置。@SpringBootApplication = (默认属性)@Configuration + @EnableAutoConfiguration + @ComponentScan
  • main方法:这是一个标准的Java应用的main的方法,主要作用是作为项目启动的入口。

编写Controller

必须要写在App启动类同一个包下才能够扫描到。

package com.wong;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class First{
@GetMapping("hello")
public String index(){
return "Hello World!";
}
}

@RestController=@Controller+@ResponseBody的结合,使用这个注解的类里面的方法都以json格式输出。

启动springboot项目

三种项目启动方式

  • App的main方法
  • 使用命令:mvn spring-boot:run 启动
  • 使用命令:mvn package 进行打包,将生成的JAR文件,使用 java -jar 命令来运行
~/Desktop/MyProject/springboot$ mvn spring-boot:run

使用maven命令行方式创建springBoot工程_spring


​2020-03-22 02:23:31.204 INFO 10993 --- [ main] com.wong.App : Started App in 1.384 seconds (JVM running for 1.731)​​出现这句说话说明启动成功!

测试

使用maven命令行方式创建springBoot工程_springBoot_02


谢谢阅读!