好久没写博客了,最近也遇到了一些技术上的坑,很多都是百度解决了,不太记得了。最近公司有个项目是用idea+gradle+springBoot的项目,想打个包在服务上做测试,于是需要用到打jar包。之前用的都是maven的方式,现在需要用到gradle,不得不说gradle确实是简洁强大,这里分享一些遇到的坑。
一、gradle 找不到plugin id “spring.boot ”。
在构造gradle配置文件的时候,我参考了网上的一些插件,其中就有一个apply plugin :'spring.boot',但是打包的时候,却没找到这个插件,之后我去了spring的官网下载spring的最纯净的demo,发现现在不用spring.boot了,取而代之的是
org.springframework.boot
下面是官网的最纯洁的gradle的配置,其中注意 io.spring.dependency-management 是管理依赖,一定要加,不然打包之后会出现依赖异常
plugins {
id 'org.springframework.boot' version '2.1.10.RELEASE'
id 'io.spring.dependency-management' version '1.0.8.RELEASE'
id 'java'
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
二、springBoot打包
springBoot的打包方式跟普通的java程序有些许差别,主要是boot打包时会帮我们定义好主类,毕竟几乎所有的boot的项目启动类除了名字不一样以外,其他的都大体一样,所以boot的打包会帮我们完成这个启动类的设置。我们在写打包语句的时候只需要指定“class-path”。
另外在打包的时候一个大坑,就是一定要用boot指定的打包bootJar,在eclipse里会有builde gradle之类的插件,其中会有bootJar,但是在idea中,idea会帮我们集成好这些,但是我遇到的坑是找不到bootJar,最初我觉得可能是跟gradle的版本有关系,后面我找了几个版本,发现还是没有,可以排除不是gradle的版本造成的差别。几经波折终于找到原因所在,我在设置仓库的时候respositories的时候,加了一个mavenLocal,加上这个之后,idea会从本地的maven仓库寻找插件,所以一直找不到。
repositories {
// mavenLocal() 此注释是为读取bootJar
mavenCentral()
jcenter()
maven { url "https://repo.spring.io/snapshot" }
maven { url "https://repo.spring.io/milestone" }
}
三、jar打包方式跳过打包
有时候我们会用普通的打包方式,如果执行jar命令的时候,会提示跳过jar,这时候可以检查下是不是在apply plugin时添加了springframeWork-boot,把这个注释掉即可。我想可能是boot打包具有特别的性质的原因,打包要严格区分是否是boot项目