1.2.2 使用Spring Initializr初始化SpringBoot项目
有时候最困难的部分是项目的初始阶段。你需要为各种项目文件创建目录结构,创建项目的构建文件以及根据构建文件确定依赖等。SpringBootCLI可以帮你去除这么多的初始工作,但如果你仍喜欢更传统的Java项目结构,那你一定会看上Spring Initializr的。
Spring Initializr本质上是一个Web应用程序,它可以为你生成一个SpringBoot项目结构。它不会生成任何应用程序代码,但是它会给你提供基本的项目结构,也会使用Maven或者Gradle构建你的项目代码。你的全部就是只需要写应用程序代码即可。
Spring Initializr可以通过多种方式使用:
- 通过Web端接口的界面
- 通过Spring Tool Suite
- 通过IntelliJ IDEA
使用Spring Boot CLI
接下来我们会一一使用这些接口来初始化,首先让我们来看看通过web端如何来实现。
使用SPRING INITIALIZR’S Web端接口界面
最直接的方式使用Spring Initializr是通过Web浏览器访问http://start.spring.io, 你可以通过图1-1看到熟悉的界面。
首先要做的两件事是选择你的项目构建使用Maven还是Gradle,还有就是选择SpringBoot的版本。默认使用的构建项目方式是Maven,会使用最新的发行版本,不会选择里程碑版或者快照版的SpringBoot,当然也欢迎你选择不同的版本。
在左边的表单中,要求你明确项目的一些元数据。至少,你必须提供项目的group和artifact。但是如果点“Switch to the full version”的链接,你可以明确项目其他的一些元数据,比如版本,基本包名等。这些元数据的输入被用来生成Maven的pom.xml文件或者Gradle的build.gradle文件。
图1-1 Spring Initializr是一个web应用程序用来生成空的Spring项目作为最初开发时使用
在右边的表单中,要求你填入项目的依赖。最简单的方式就是在text表单中输入依赖的类型。根据输入的类型,会出现一个与之相匹配的列表,选择你所需要的,它将会被添加到项目中去。如果你没有找到你所需要的,点击“Switch to the full version”的链接,你可以得到完整的所提供的依赖列表。
如果你看过附录B,你可以识别出相应的SpringBoot所提供的依赖。事实上,通过选择任意的这些依赖,会告诉Initializr添加依赖到构建文件中作为启动使用。(我们会在第二章更多的讨论启动依赖)。
只要你填写好表单里的内容并且选择好了依赖,点击生成项目按钮,Spring Initializr会为你生成一个项目。生成的项目会打成zip包,名字便是你填写的Artifact,通过浏览器可以将其下载下来。zip包的内容可能会有写不同,这取决于你之前生成项目的选择。无论何种方式,zip包都包含了最基本的项目,之后你就可以使用SpringBoot为你创建的项目进行开发了。
举个例子,假设你通过Spring Initializr指定了如下初始化信息:
* Artifact: myapp
* Package Name: myapp
* Type: Gradle Project
* Dependencies: Web and JPA
在点击GenerateProject后,你会得到一个名字为myapp.zip的文件,解压它后,你可以看到如图1-2所示的熟悉的项目结构。
图1.2 Initializr-创建的一个最小化的基础项目可以用来构建SpringBoot的应用程序
正如你所见,项目中只有很少的代码,大多是一堆空的目录,包括了:
- build.gradle/pom.xml—Gradle构建项目的叙述文件。如果你选择的是Maven则会是一个pom.xml文件。
- Application.java—一个具有main函数的程序,可以让从此开始项目的运行。
- ApplicationTests.java—一个空的Junit测试类,用来测试并加载Spring应用上下文通过SpringBoot的自动配置来实现。
- application.properties—一个空的配置文件,为你可以添加合适的配置做准备了。
这些空的目录在SpringBoot应用中有重要的作用。static目录可以将web应用程序中的一些静态文件如JavaScript,stylesheets,images等等放入其中管理,至于templates目录,之后你可以看到,你可以讲需要渲染的模型数据放到这个目录下。
你也可能会选择通过IDE来Initializr创建你的项目。如果Spring Tool Suite是你选择的IDE,则你可以在IDE中直接创建项目了。接下来让我们看一看Spring Tool Suite(STS)对创建SpringBoot的支持吧。
使用SPRING TOOL SUITE(STS)创建Spring Boot项目
Spring Tool Suite 3 是开发Spring应用程序非常好的IDE。自从3.4.0版本之后,STS已经集成了Spring Initializr的功能,使得开始一个SpringBoot项目变得十分简单了。
要创建SpringBoot应用程序,首先右键点击选择the New >,之后点击Spring Starter Project的选项,这样之后你会开到如图1-3所示的对话框出现。
图1-3 Spring Tool Suite IDE通过与Spring Initializr集成来创建SpringBoot项目
正如你所看到的,这个对话框中具有和web端页面一样的信息。事实上,这些填入的数据会和在web端页面一样提供给Spring Initializr来创建项目。
你可以指定你的项目创建在文件系统的何处,也可以将项目添加到制定的工作集中。点击下一步之后,你会看到如图1-4所示的对话框提示。
图1-4 the Spring Starter Project创建的对话花开,你可以明确指定的项目的创建
Localtion会指定你项目存放的位置,如果你需要eclipse的工作集来组织管理你项目,通过select选择框,你可以添加项目到制定的工作集中。
这个位置信息简单的描述了将要连接Initializr的URL,大多情况下,你可以忽略这一个地方,当然,如果你要部署你你自定义 的tializr服务(比如使用github克隆出的https://github.com/spring-io/initializr), 你则需要将基本的URL填写在此处。
点击finish按钮后,会进入项目生成的和导入的进程中。重要的是要知道STS的StarterProject的创建项目也就是http://start.spring.io 中的Spring Initializr的创建项目,所以你必须联网才能确保其正确工作。
当项目导入到工作空间后,你可以准备启动你的应用程序了。当你开发的你的应用程序的时候,你会发现STS将SpringBoot一些地方封装起来,举个例子,你可以在项目上点击右键,选择Run菜单中的Run As > Spring Boot,你就可以使用内嵌的服务来运行你的应用程序了。
需要重视理解的是STS通过RESTAPI来实现与Initializr的协调工作。因此,当其工作的时候会连接Initializr,如果你的用来开发机器没有联网,或者Initializr被防火墙挡住,你使用STS创建SpringStarterProject向导也就不会成功了。
使用INTELLIJ IDEA创建SpringBoot项目
IntelliJ IDEA是一个非常受欢迎的IDE,我们来看看IntelliJ IDEA 14.1是如何支持SpringBoot的。
使用IntelliJ IDEA开始一个SpringBoot项目首先第一步就是选择New > Project,然后在左边的列表中选择Spring Initializr,如图1-5所示,接下来要求输入的内容就和STS的Initializr初始化Web应用程序类似了。
图1-5 IntelliJ IDEA’s Spring Boot initialization 向导第一屏
在初始化的窗口中,选择了左边的Spring Initializr之后,你会选择项目的SDK版本,选择Initializr web service的地址,如果你要运行你自己的Initializr实例的化,则需要做这个选择,否则就不用做任何改变,直接下一步。然后,你会看到如图1-6所示的提示内容:
图1-6 IntelliJ IDEA’s Spring Boot initialization 向导之填写项目基本信息
通过IntelliJ IDEA填写SpringBoot初始化向导要求的项目基本信息,比如项目名称,groupId,artifactId,Java的版本,构建方式使用Gradle还是Maven等描述后,点击下一步,则会看到如图1-7所示的界面。
图1-7 IntelliJ IDEA’s Spring Boot initialization 向导选择项目依赖
之前我们填写了项目的基本信息后,在这里我们要求将项目的依赖关系指定。正如STS创建SpringStarter看到的依赖一样,你做出 选择后,点击下一步 ,就会进入了最后的如图1-8所示界面了。
图1-8 IntelliJ IDEA’s Spring Boot initialization 向导最后一屏
最后的设置很简单,告诉IntelliJ IDEA的名字以及项目保存的路径,之后点击Finish即可完成创建。这样你就使用这个IDE创建了最基础的SpringBoot项目了。
使用SpringBootCLI中的INITIALIZR创建项目
正如你之前所看到的,SpringBoot CLI强大的方式开发Spring应用程序-只需要专注于写代码即可。然而,Spring Boot CLI也有一些命令来帮助你在传统Java项目中,初始化和快速启动开发。
SpringBoot CLI通过init的命令来实现和Initializr客户端接口一样的动作。以下命令就是最简单使用init的方式创建基础的SpringBoot项目:
$ spring init
通过连接Initializr Web应用程序,init命令会下载demo.zip文件,如果你解压这个项目,你会发现使用Maven构建的典型的项目结构。Maven构建的规格是最小化的,仅仅包括了SpringBoot启动和测试的依赖,以后你可以适当的逐步添加。
如果你希望构建一个web应用程序,并依赖于JPA和SpringSecurity,则可以通过-d或则--dependencies来指名依赖。
$ spring init -dweb,jpa,security
By default, the build specification for both Maven and Gradle builds will produce an executable JAR file. If you’d rather produce a WAR file, you can specify so with the --packaging or -p parameter:
$ spring init -dweb,jpa,security --build gradle -p war
So far, the ways we’ve used the init command have resulted in a zip file being down- loaded. If you’d like for the CLI to crack open that zip file for you, you can specify a directory for the project to be extracted to:
$ spring init -dweb,jpa,security --build gradle -p war myapp
The last parameter given here indicates that you want the project to be extracted to
the myapp directory.
Optionally, if you want the CLI to extract the generated project into the current
directory, you can use either the --extract or the -x parameter:
$ spring init -dweb,jpa,security --build gradle -p jar -x
The init command has several other parameters, including parameters for building a Groovy-based project, specifying the Java version to compile with, and selecting a ver- sion of Spring Boot to build against. You can discover all of the parameters by using the help command:
$ spring help init
You can also find out what choices are available for those parameters by using the --list or -l parameter with the init command:
$ spring init -l
You’ll notice that although spring init -l lists several parameters that are supported
by the Initializr, not all of those parameters are directly supported by the Spring Boot
CLI ’s init command. For instance, you can’t specify the root package name when ini-
tializing a project with the CLI ; it will default to “demo”. spring help init can help
you discover what parameters are supported by the CLI ’s init command.
Whether you use Initializr’s web-based interface, create your projects from Spring
Tool Suite, or use the Spring Boot CLI to initialize a project, projects created using the
Spring Boot Initializr have a familiar project layout, not unlike other Java projects you
may have developed before.