前言
子曰:“工欲善其事,必先利其器”。说的是做好一件事,准备工作是非常重要的。本篇和下一篇主要介绍构建微服务前的准备工作,本章介绍开发环境的搭建,下一篇讲解开发框架Spring Boot的入门。搭建的环境包括JDK的安装、开发工具的安装,以及项目的构建工具。
常见的开发Spring Cloud项目的工具包括MyEclipse 、IntellJ Idea (简称IDEA),强烈推荐使用IDEA作为开发工具。IDEA和Spring Boot一起使用,个人认为是开发Java程序的最佳体验。
本书的案例代码都是在IDEA上开发的,所以本章介绍的开发工具也是IDEA。项目的构建工具包括Apache Maven和Gradle,Gradle 是一- 个基于Apache Ant和Apache Maven概念的项目自动化构建的工具。两个构建工具都非常方便,按个人习惯来选择,Apache Maven 的使用率要高一些,所以选择介绍的构建工具为Apache Maven。
JDK 的安装
JDK 的下载和安装
由于Spring Boot在未来的版本2.0中要求最低的JDK版本为1.8,所以选择安装JDK1.8。
Mac系统已经安装了JDK,所以不需要用户自行安装。Windows 用户需要从Oracle官网下载安装包,下载完成后,解压安装。
环境变量的配置
JDK安装完成后,需要设置环境变量。在Windows操作系统中,打开“我的电脑”→“属性”→“高级”一“环境变量”,新建系统变量“JAVA HOME",变量值为“JDK”的安装目录,例如我的安装目录为“D:Program Files\Java\ jdk1.8.0_ 121”。选择“系统变量”中变量名为“Path"的环境变量,双击该变量,把JDK安装路径中bin目录的绝对路径追加到环境变量Path尾部,注意用“;”来分隔前面的变量。例如我在Path尾部追加为“;%JAVA_ HOME%\bin%JAVA_ HOME%\jre\bin;"。
JDK的安装工作已经全部完成,现在来验证JDK是否安装成功。打开命令行窗口,输入“java -version”,如果JDK安装成功且环境变量设置成功,命令行窗口会显示如下信息:
java version "1.8.0 121"
Java (TM)SE Runtime Environment (build 1.8.0 121-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
IDEA的安装
对于习惯了使用Eclipse 或者MyEclipse的开发者来说,可能不愿意换新的IDEA,因为需要花时间去学习,还要去适应新的开发工具。个人觉得,IDEA比Eclipse 系列好用很多,它带来了不一一样的开发体验,主要体现在以下5个方面。
有对用户 更加友好的界面,有更加护眼的黑色主题,感觉更高端大气。
比 Eclipse更加智能,主要体现在代码的补全方面。
更加友好的代码提 示功能。
内置Maven、Gradle等构建工具,并且下载依赖包非常智能和流畅。
更加强大的纠错能 力。
虽然,Eclipse和IDEA都能开发出Java项目,Eclipse 也非常好用,但两者的写代码体验不在一个级别上。IDEA具有更友好的界面和更智能的代码提示,以及更强大的纠错能力,所以IDEA写代码体验更好、效率更高。建议读者用IDEA来开发Java项目,本篇所有的代码都是用IDEA来写的。
IDEA的下载
去官方网站hts://www.jetbrains.com/idea/ 下载IDEA, IDEA有免费版和商业版,免费版能做一些基本的Java开发,但是不能用来进行J2EE的开发,所以需要下载商业版。商业版对学生免费,你需要一个.edu结尾的邮箱去申请获取免费版本,申请通过即可免费使用商业版本。
下载完成,按照提示的步骤安装即可。安装完成后,启动IDEA,会进入如图3-1所示的界面。
启动成功后,需要配置JDK,单击图3-1右下方的“Configure”按钮,选择“Project Defaults"→“Project Structures",进入配置界面,选择"Project SDK"为安装的JDK1.8即可,ProjectLanguage Level为SDK (default8), 如图3-2所示。
用 IDEA创建一个Spring Boot工程
IDEA提供了多种方式去创建工程,非常便捷。本节介绍采用Spring Initializr 的方式来创建工程。在图3-1的界面选择“Create New Project",创建新工程,选择“Spring Initalizr"的方式创建Spring Boot工程,如图3-3所示。
单击“Next", 填写Group (例如“com.forezp")和Artifact ( 例如“hello-world"),选择默认的Maven工程,其他配置默认即可。单击“Next", 进入Spring Initalizr 模块选择界面,如图3-4所示。Spring Initalizr 提供了很多可选的常见功能模块,大多数模块是与Spring Boot进行了整合的起步依赖的功能模块,例如Core提供了AOP、Security、Cache、Session等模块,Web提供了Web、Webservice、 WebSocket 等模块,读者可以自行查看相关模块的相关功能。
本例中选择Web模块的Web功能,单击“Next”,然后单击"Finish”。
单击“Finish" 之后,IDEA会从spring.io网站下载工程模板,下载完成后就是一个完整的Spring Boot工程。在工程的目录下有一个HelloWorldApplication类,该类为程序的启动类,在该类上添加@RestController注解,开启RestController 的功能,写一个接口“hi”,使用@GetMappin注解表明为Get类型的请求。具体代码如下:
@SpringBootApplication
@RestController
public class HelloWorldApplication {
public static void main(String[] args) {
SpringApplication. run (HelloWorldApplication.class, args);
@GetMapping("/hi")
public String hi () {
return "hi,I'm forezp";
}
启动HelloWorldApplication类的main方法,程序启动。程序启动完成后,在浏览器上输入"http://localhost:8080 /hi",浏览器会显示“hi,'m forezp”。关于Spring Boot,会在下一章中会作入门级的详细介绍。
用IDEA启动多个Spring Boot工程实例
在上述讲解的案例中,一个Spring Boot 工程经常需要启动多个实例,分别占用不同的端口。在IDEA上单击Application右边的下三角,弹出选项后,单击“Edit Configuration", 如图3-5所示。
打开配置界面后,将默认的“Single instance only" (单实例)前的对号去掉,如图3-6所示。通过修改配置文件application.yml的server.port端口,并启动。多个实例需要多个不同的端口号,分别启动即可。
构建工具Maven的使用
Maven 简介
Apache Maven是一款软件项目管理的开源工具,是基于工程对象模型(Pom)的概念而设计的。Maven可以管理项目构建的整个生命周期,包括清理(Clean)、 编译(Compile)、 打包(Package)、测试(Test) 等环节。同时Maven提供了非常丰富的插件,使得构建项目和管理项目变得简单。构建一个项目所需要的流程如下。
(1)生成源码。
(2)从源码中生成文档。
(3)编译源码。
(4)测试。
(5)将源码打包成Jar,运行在服务器、仓库或者其他位置。
Apache Maven已经实现了以上的全部功能,并且只需要相关的命令就可以完成相关的功能。
Maven 的安装
安装Maven前,需要保证JDK已经正确安装,并且环境变量已经配置正确,Maven 版本为3.0之后的版本,需要的JDK版本至少为1.6 版本。
从官网http://maven.apache.org/download.cgi下载完Apache Maven, 解压到任意目录,例如我解压到/usr/local下:
tar xzvf apache-rnaven 0-b . tar. gz sudo rnv apache-rnaven-3.5.0 /usr/local/
配置环境,先打开配置环境变量的文件 在终端运行如下命令:
$ vi ~/ .bash profile
在配置文件中需要 置一个 M2_ HOME变量,它的路径为 Maven 安装目录路径,添加M2 HOME 变量到环境变量 path 中。配置文件如下:
export M2_ HOME=/usr/ local/ apache -maven-3.5.0
export PATH=$PATH: $M2 HOME/bin
检查 Maven 是否安装成功和 Maven 的环境变量是否配置正确,可以使用 Maven 命令“ mvn-v ”去检查。在终端输入“mvn-v ”, 如果终端界面显示如下信息,则证明 Maven 安装成功且环境变量配置正确。
Apache Maven 3.5.0 (ff8f5e7444045639af65f6095c62210b5713f426; 2017-04-04T03 39:06+0 日:00)
Maven home : /usr/local/apache -rnaven- 3 . 5.0
Java version: 1.8 . 0 121 , vendor : Oracle Corporation
Java home: /Library/Java/JavaVirtualMachines/]dkl.8.0_121.jdk/Contents/Horne/jre
Default locale:zh_ CN,platform encoding : UTF- 8
OS name :”mac os x ”, version : ” 10 . 12 . 3 ”, arch :”x86_64 ”, family : ”mac ”
设置 Maven 的本地仓 ,在终端输入命令切换到 Maven 置文件的目录,打 Maven的配置文件 settings.xml 。在终端输入的命如下:
cd /usr/ local /apache-maven-3.5.0/
vim settings . xml
打开配置文件 settings nl 后,在配置文件中修改本地仓库的路径,本案例的本地仓库路径为“/usr local mvn rep 。”,配 如下:
/usr/local/rnvn_repo
由于 Maven 程服务器在国外,可以添加阿里云 镜像 这样下载 Jar 包的速度会大大增加,在配置文件 sett ings.xml 下添加如下内容:
<mirrors>
<mirror>
<id>alirnavenid>
<narne>aliyun rnavennarne>
<url>http://rnaven . aliyun.com/nexus/content/groups/public/
url>
<mirrorOf>centralmir rorOf>
mirror>
mirrors>
Maven 的核心概念
Maven 的核心 porn 件, porn 文件以 xm 文件的形式来表示资源,包括 些依赖 Jar插件、构建文件等。Maven 作过程如图 3-7 所示
首先读取pom文件。pom文件是Maven的核心,所有的项目依赖、插件都在pom文件中统-一管理。
下载依赖 Jar到本地仓库。Maven命令执行时,首先会检查pom文件的依赖 Jar,当检测到本地没有安装依赖Jar时,会默认从Maven的中央仓库下载依赖Jar,中央仓库地址为htp://repol/ maven.org/maven2/。依赖Jar下载成功后,会存放在本地仓库中,如果下载不成功,则该命令执行不会通过。
执行构建的生命周期。Maven的构建过程会被分解成构建阶段和构建目标,它们共同构成了Maven的生命周期。
执行构建插件。插件可以更方便地执行构建的各个阶段,也可以用插件实现一些额外的功能。目前Maven有非常丰富的插件,如果需要,你也可以自己实现Maven插件。
编写Pom文件
pom文件是一个xml文件,用于描述项目用到的资源、项目依赖、插件、代码位置等信息,是整个工程的核心。pom.xml文件一般放在项目的根目录下。以3.2.1节案例中工程的pom文件为例来讲解,其代码如下:
〈?xml version 1. encoding UTF ?〉
<project xmlns http //maven apache org/POM/4.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">
<mode1Version>4 . 0 . 0mode1Version>
<groupid>com . forezpgroupid>
<artifactid>hello-worldartifactid>
<version>0 . 0 . 1-SNAPSHOTversion>
<packaging>jarpackaging>
<name>hello- worldname>
<description>Demo project for Spring Bootdescription>
<pare 口 t>
<groupid>org . springframework . bootgroupid>
<artifactid>spring- boot- starter- parentartifactid>
<version>l . 5 . 3 . RELEASEversion>
<relativePath/> < !- - lookup parent from repository -->
parent>
<properties>
<project . build . sourceEncoding>UTF- 8
project.build . sourceEncoding>
<project . reporting . outputEncoding>UTF- 8
project reporti g.outputE cod ng>
〈〕 ava.version>l. 自〈/〕 ava.vers on>
properties>
<dependencies>
<dependency>
<groupid>org . springfr amework . bootgroupid>
<artifactid>spring-boot- starter-webartifactid>
dependency>
<dependency>
<groupid>org . springframework . bootgroupid>
<artifactid>spring- boot- starter-testartifactid>
<scope>testscope>
dependency>
dependencies>
<build>
<plug ins>
<plugin>
<groupid>org . springframework.bootgroupid>
<artif actid>spring-boot-maven-pluginartifactid>
plugin>
plugins>
build>
project>
pom.xml的第一行 指定了xml的版本和编码方式。project 的标签是该文件的根元素,它声明了pom相关的命名空间。modelVersion 指定了pom的版本,对于Maven 3来说,它的版本为4.0.0。
groupld、artifactld 和version是3个最重要的标签,根据这3个标签,可以在Maven仓库中唯一确定该依赖Jar。其中,groupld 代表了公司、组织的名称,一般为 公司域名的倒写,如本例中的com.forezp; artifactld 代表该项目的全局唯一Id, 如本例中的hello-world; version 是指该项目的版本。将项目上传到Maven仓库中,有这3个标签才能准确无误地找到该Jar包。
parent标签用于指定父pom,本案例采用的父pom是版本号为1.5.3.RELEASE 的spring-boot- starter parent的pom。
properties标签用于声明一些常量,例如上述代码中的源码编码为UTF-8,输出代码也为UTF-8,Java 版本为1.8。
dependencies标签为依赖的根元素,里面可以包含多个dependency元素,dependency 里具体为各个依赖Jar的3个坐标,即groupId、artifactld 和version。其中version可以缺省,如果缺省,就会默认为最新发布的版本。
build为构建标签,它可以包含plugins (插件)标签,plugins 标签中可以包含若干个plugin标签,可以根据项目的需求添加相应的plugin。本例中有spring boot-maven-plugin插件,用此插件可以启动Spring Boot工程。
Maven 构建项目的生命周期
在Maven工程中,已经默认定义了构建工程的生命周期,不需要额外引用其他的插件,因为Maven本身就已经集成了这些插件。默认的生命周期包括了23个阶段,如表3-1所示。
常用的Maven命令
(1) mvn clean删除工程的target目录下的所有文件。
(2) mvn package将工程打为Jar包。
在终端上切换到3.2.1节中项目的根目录下,输入mvn
package命令,终端最后会显示如下信息,证明工程打Jar包成功。
Tests run : 1 , Failures : 0 , Errors : O, Skipped : 0
[INFO) --- maven-jar-plugin : 2 . 6 : jar (default- jar) @ hello-world ---
[INFO) Bu i lding jar:
/Users/forezp/IdeaPro] ects/jianshu2/hello- world/target/hello-world-0 . 0 . l-SNAPSHOT . jar
[INFO)
[I NFO) --- spring- boot-maven-plugin : 1 . 5 . 3 . RELEASE : repackage (default ) @ hello-world ---
[I NFO) --------- ---------------------------------------------------
[INFO) BUILD SUCCESS
[INFO) -------------------------- 一- --
[INFO ) Final Memory : 32M/271M
[INFO ) --一- 一- -一一-- ----------------
上述的 mvn package 打包命令不 个简 的命 它是 系列有序的命 构成的,mvn package 命令执行过程包含以下 个阶段。
验证。
编译代码。
处理代码。
生成资源文件。
生成Jar包。
测试。
(3) mvn package -Dmaven.test.skip=ture,打包时跳过测试。
(4) mvn compile编译工程代码,不生成Jar包。
(5) mvn install 命令包含了mvn package的所有过程,并且将生成的Jar包安装到本地仓库。执行mvn install命令,可以看到终端输出的日志,经过了与mvn package相同的阶段,最后将Jar 包安装到本地仓库。终端显示的日志如下:
[INFO] Installing
/Users/forezp/IdeaProjects/j anshu2/hello-world/target/hello-world 0.l-SNAPSHOT.jar
to
/Users/forezp/ . m2/repository/com/forezp/hello- world/0 . 0 . l-SNAPSHOT/hello- world-0.0.1-
SNAPSHOT . jar
[INFO] Installing /Users/forezp/IdeaPro] ects/]ianshu2/hello-world/pom . xml to
/Users/forezp/.m2/repository/com/forezp/hello- world/0 . 0 . l - SNAPSHOT/hello- world- 0 . 0 . l
SNAPSHOT . porn
[INFO] --------------------------------------- - - ----- ------ --- -----
[INFO] BUILD SUCCESS
[INFO] -------------------------------- - ------
[INFO] Total time : 7 251 s
[INFO] Finished at : 2017-05-24T22 : 43 : 48+08 : 00
[INFO] Final Memory : 30M/272M
[INFO] -------------------------- - -- ---------------- - - -
(6) mvn spring-boot:run 使用spring-boot插件,启动Spring Boot工程。该命令执行时先检查Spring Boot 工程源码是否编译,如果工程源码没有编译,则先编译;如果编译了;则启动工程,启动后工程日志如下:
(7) mvn test测试。
(8) mvn idea:idea生成idea项目。
(9) mvn jar:jar只打Jar包。
(10) mvn validate检验资源是否可用。,
本篇讲述了开发项目中开发环境的搭建和开发工具的使用,难免会有点枯燥,但却是开发微服务的基本前提,下 一篇将讲述Spring Boot的入门内容。
多多转发关注小编不迷路,每日更新技术好文~~~~
感谢大家支持!!!!