语言都是相通的,只要搞清楚概念后就可以编写代码了。而概念是需要学习成本的。
本文首发于博客园-Ryan Miao. 由于限制2000字,只能分多篇。
Java WebJava Web的开源框架中,目前最常用的是SpringBoot. SpringBoot可以提供API,可以渲染页面,是作为API Server的最佳选择。
写了无数遍hello world, 这次还是要从hello world开始。
demo sourcehttps://github.com/Ryan-Miao/springboot-demo-gradle
Java Web的包管理工具有maven,gradle。这里将使用gradle作为依赖管理工具。
Gradle是什么gradle是继maven之后,Java项目构建工具的集大成者。它管理依赖,为什么要管理依赖?我们的项目中将会使用很多其他的lib,这些lib有我们自己的,也有开源的,甚至大部分都是开源的。当引入这些lib的时候,引入哪个版本?去哪里下载?多个版本产生了冲突怎么办?以及最后我们项目开发完成后,怎么打包?甚至,想使用CI/CD自动化构建工具,如何集成?这就是gradle可以做的事情。
gradle要怎么学?
一般来说不用学,不用理会内置的逻辑,只需要用就好。就好比IDE,你不会深究IDE是c编写的还是Java编写的,但会使用IDE来编写代码。同样,gradle的用法很简单,可以满足我们开发中觉得部分需求。当然,当需要自定义功能的时候,可以使用groovy
来编写gradle脚本。
IDEA是目前构建Java Web项目最火IDE。用法和Eclipse还是有不少的区别,刚转过来的时候可能有点不习惯。但根据2-8原则,我们只需要掌握其中一部分用法就可以开发了,剩下的高级用法可以在开发中慢慢摸索。即,其实用法也很简单。
新建一个gradle项目点击File
->New
->project
->gradle
->勾选Java
如果发现没有JDK,那么new一个就好。
下一步,设置项目标签,group通常是公司名称倒写,比如com.google
,com.alibaba
等. ArtifactId就是我们的项目名称,比如这次demo为springboot-demo
然后一路next,完成后确定。IDEA会下载gradle,下载简单的依赖,完毕后,项目根目录下多出几个文件,目前不用care。
.
├── build.gradle
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── settings.gradle
└── src
├── main
│ ├── java
│ └── resources
└── test
├── java
└── resources
接下来修改build.gradle
,这个文件是依赖管理的核心文件
buildscript {
repositories {
maven {
url "http://maven.aliyun.com/nexus/content/groups/public/"
}
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:1.5.8.RELEASE")
}
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'org.springframework.boot'
jar {
baseName = 'springboot-demo'
version = '0.1.0'
}
repositories {
maven {
url "http://maven.aliyun.com/nexus/content/groups/public/"
}
mavenCentral()
}
sourceCompatibility = 1.8
targetCompatibility = 1.8
dependencies {
compile("org.springframework.boot:spring-boot-starter-web")
testCompile('org.springframework.boot:spring-boot-starter-test')
}
- maven是一个仓库,一些开源的第三方库lib都从这里下载,这里引用了aliyun镜像,因为maven在国内访问比较慢,如果在国外可以移除这个节点
buildscript
里就这么写,不用关心为什么,只需要知道这里这样写就可以引入springboot的版本dependencies
是唯一会改变和增加内容的地方,当需要第三方库的时候添加,添加规则就是groupId:artifactId:version
, 正好和我们创建项目的时候声明的标签一样
修改build.gradle
之后就要重新build,在IDEA中,点击右侧的工具栏,gradle,点击刷新按钮。就会自动下依赖,如果没有下载,点击gradle下Task里的build
按钮。
另一个方式就是命令行:
细心可以发现项目根目录下有gradlew
和gradlew.bat
这个文件,这是分别为linux和windows准备的启动工具,在Linux系统中
./gradlew build
or
sh gradlew build
在windows中
gradlew build
编译完成后,在左侧的项目目录下的External Libraties
下可以看到我们引入的第三方库。为什么这么多?因为依赖是树状的,或者说网状的。lib也有他自己的依赖,gradle会负责把我们引入的lib的依赖也给下载下来。在没有maven和gradle这种构建工具之前,项目开发都是自己下载jar,自己丢进去classpath里,很容遗漏,也很容易造成冲突。gralde会负责下载依赖,还会解决冲突,比如不同版本等问题。
Springboot的一个优点是约定大于配置,意思是我们都约定好怎么配置,我帮你配置好了,你直接用就好。因此,springmvc时代的大部分配置都可以自动化完成。我们的启动类也只有一行.
可以看到,src/main/java
这个目录变成蓝色,在IDEA里是指sourceSet,也就是源文件,我们的Java代码就是放在这文件下的,这也是约定好的。
在该目录下新建com.test.demo.Application.java
package com.test.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* Created by Ryan on 2017/11/13/0013.
*/
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
到这里,我们的服务端就配置完毕了。运行main方法即可启动。
下一篇, 第一个API。