使用jenkins持续集成springboot项目(一、项目打包坑集)

目录

一、项目.jar中没有主清单属性

二、NoClassDefFoundError

三、丝滑开始

四、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项目的整体案例:

  1. springboot项目打包,以及打包出现的各种问题;
  2. jenkins任务的详细配置
  3. 服务器上的操作步骤
  4. nginx的代理过程

相关内容详见:

使用jenkins持续集成springboot项目(四、nginx域名映射)

使用jenkins持续集成springboot项目(三、上服务器)

使用jenkins持续集成springboot项目(二、Jenkins任务配置)

使用jenkins持续集成springboot项目(一、项目打包坑集)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈年小趴菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值