目录
四、Property ‘sqlSessionFactory‘ or ‘sqlSessionTemplate‘ are require
项目架构:springboot+mybatisplus+mysql+gradle
无坑版:请直接跳到第三点
踩坑开始:
一、项目.jar中没有主清单属性
打包:gradle clean build jar
建议先本地运行尝试,不然在服务器上来回传包真的很费时间,别问我是怎么知道的╮(╯▽╰)╭。
本地尝试命令如下:
- cd 项目路径\build\libs
- java -jar 项目jar包
你会得到一个错误:项目.jar中没有主清单属性。
原因:打包之后会自动生成MANIFEST.MF文件,正确的样子如下。但是我们缺少配置,所以就没有“Main-class”。
解决方案:build.gradle里面加上配置,你会发现解决了这个问题。
但是别急,这个解决方向是错的,所以请看完再动/(ㄒoㄒ)/~~~~~~~~~~~~~~~。
Manifest-Version: 1.0
Main-Class: com.example.SpringBootApplication # 项目当中的主类路径
二、NoClassDefFoundError
再来一边打包,运行。你会发现报错如下(内心OS:本地运行没问题啊,为什么打包之后有问题了):
Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/boot/SpringApplication
at com.jushu.api.JushuApplication.main(JushuApplication.java:12)
Caused by: java.lang.ClassNotFoundException: org.springframework.boot.SpringApplication
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
... 1 more
再来一波百度、谷歌、chatgpt... ...
好吧,打的包里面没有包含我们的依赖。
build.gradle里面配置上,就都ok了,上面加的“Main-class”请删掉,没有用。
bootJar {
archiveBaseName = 'spring-boot'
archiveVersion = '0.0.1'
}
三、丝滑开始
如下是我的build.gradle,操作命令 gradle clean build bootJar。
此刻细心的小伙伴会发现之前gradle clean build jar打出来的包只有60KB,但是bootJar之后直接变成了60M(数值可忽略,重点是单位)。大家也可以通过这个大小来初步判断jar包是否可正常运行。
plugins {
id 'java'
id 'org.springframework.boot' version '2.7.8'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
}
group = 'com.jushu'
version = '0.0.1-SNAPSHOT'
description = 'spring-boot'
java {
sourceCompatibility = '8'
}
ext {
springBootVersion = '2.7.8'
mybatisPlusVersion = '3.5.3'
lombokVersion = '1.18.24'
springfoxVersion = '3.0.0'
mysqlConnectorVersion = '8.0.33'
elasticsearchVersion = '7.17.1'
}
repositories {
maven { url 'https://maven.aliyun.com/repository/public' }
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web:'+springBootVersion
testImplementation 'org.springframework.boot:spring-boot-starter-test:'+springBootVersion
implementation 'com.baomidou:mybatis-plus-boot-starter:'+mybatisPlusVersion
implementation 'mysql:mysql-connector-java:'+mysqlConnectorVersion
implementation 'com.baomidou:mybatis-plus-core:'+mybatisPlusVersion
implementation 'org.projectlombok:lombok:'+lombokVersion
compileOnly 'org.projectlombok:lombok:'+lombokVersion
annotationProcessor 'org.projectlombok:lombok:'+lombokVersion
implementation 'io.springfox:springfox-boot-starter:'+springfoxVersion
implementation 'org.elasticsearch.client:elasticsearch-rest-high-level-client:'+elasticsearchVersion
implementation 'org.elasticsearch.client:elasticsearch-rest-client:'+elasticsearchVersion
implementation 'org.elasticsearch:elasticsearch:'+elasticsearchVersion
}
bootJar {
archiveBaseName = 'spring-boot'
archiveVersion = '0.0.1'
}
tasks.withType(JavaCompile).configureEach {
options.encoding = 'UTF-8'
}
四、Property ‘sqlSessionFactory‘ or ‘sqlSessionTemplate‘ are require
项目启动时报的错,原因是我的项目是maven转gradle的。build.gradle的内容就比较杂乱。
然后估计是包冲突了,删除了一些没用的build.gradle里面的配置项。
重新整理成上面的清爽样子就解决了。
五、总结
这是一个使用jenkins持续集成springboot项目的整体案例:
- springboot项目打包,以及打包出现的各种问题;
- jenkins任务的详细配置
- 服务器上的操作步骤
- nginx的代理过程
相关内容详见:
使用jenkins持续集成springboot项目(四、nginx域名映射)
使用jenkins持续集成springboot项目(三、上服务器)