相对于其他后端语言,java一直被诟病太笨重,不适宜快速开发,下面介绍几个java的依赖、插件,来提升你的项目开发速度。
gradle
相对于maven,gradle最大的好处是直观、简洁。不要小看直观简洁的力量,。项目依赖管理的简洁带来的好处是管理起来非常方便。在SpringBoot还没流行的时代,spring MVC需要引用的jar包非常多,pom文件往往会有几百甚至上千行。而改用gradle后,行数将会大大减少,带来的直观和心理舒适感是maven无法比拟的。
而且,gradle的task编写起来比maven也要好很多,由于gradle的task是groovy的语法,更符合程序员的认知。比如,项目依赖中引入docker镜像的打包,在maven中表现为:
<properties>
<docker.image.prefix>${docker.image}</docker.image.prefix>
</properties>
<build>
<plugins>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.11</version>
<configuration>
<imageName>${docker.image.prefix}/${project.artifactId}:${project.version}</imageName>
<dockerDirectory>src/main/docker</dockerDirectory>
<pushImage>true</pushImage>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
</build>
而在gradle中的表现为:
task buildDocker(type: Docker, dependsOn: build) {
push = true
applicationName = jar.baseName
dockerfile = file('src/main/docker/Dockerfile')
doFirst {
copy {
from jar
into stageDir
}
}
}
孰好孰坏,一目了然。
gradle的具体使用可以参考Gradle 官网。
swagger
前后端分离模式项目的开发流程一般是后端写好接口后,使用postman,soapui等工具测试完成后,编写接口文档更新到wiki,然后转给前端工程师。
这样带来的问题是,后期如果出现接口变动,后端往往不会及时去更新文档,最后导致文档与最新代码之间出现割裂。而且这种方式一般只提供给前端正确的响应结果,对于错误的响应,前端并不能从接口文档直观的了解。
Swagger是一种Rest API的简单但强大的表示方式,标准的,语言无关,这种表示方式不但人可读,而且机器可读。可以作为Rest API的交互式文档,以更友好的方式将接口描述展示给接口的消费者。
现在流行的开源项目已经开始支持swagger风格的接口描述了,比如我们使用的docker调度框架marathon,它提供的marathon REST API,既准确的描述了每个接口、字段,而且提供调用接口,比文档形势的接口描述更加友好。
swagger的具体使用可以参考Swagger 官网,只需在项目中引入swagger依赖,作简单配置即可。
Lombok
作为静态语言,java在做接口对接的时候,经常需要处理POJO类,在代码里往往会产生许多影响阅读的setter、getter、builder等代码。对于二三十个属性的POJO类,会由于getter、setter的缘故,会导致代码量非常大,对于字段的删减就变得很繁琐。如果在里面还混合了静态的构建者方法,就更难维护。
class User{
String name;
int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
使用lombok来改造你的POJO类之后,表现为:
@Data
class User{
String name;
int age;
}
lombok可以在javac编译时,分析语法树,给带有lombok注解的类的属性添加getter、setter、builder等方法。效率没有差别,但代码更加简洁。