Gradle 配置 Lombok 项目并发布到私有 Maven 仓库的完整指南

news2025/3/6 21:04:46

Gradle 配置 Lombok 项目并发布到私有 Maven 仓库的完整指南

在 Java 项目开发中,使用 Lombok 可以极大地减少样板代码(如 getter/setter 方法、构造器等),提高开发效率。然而,当使用 Gradle 构建工具并将项目发布到私有 Maven 仓库时,常常会遇到 Lombok 注解未正确发布或生成代码缺失的问题。本文将详细讲解如何正确配置 Gradle 项目,确保 Lombok 在开发和发布过程中正常工作。


一、常见问题

  1. Lombok注解消失
    Lombok 注解在编译阶段生效,编译后的字节码中已经生成了相应的方法或字段,注解本身不会被保留。因此,发布到 Maven 仓库的 JAR 包中通常看不到 Lombok 注解。

  2. 生成代码缺失
    如果 Gradle 配置不正确,例如缺少 annotationProcessor,编译阶段 Lombok 的注解处理器无法生效,最终生成的代码可能会不完整。

  3. 依赖范围问题
    Lombok 是一个编译时依赖,而不是运行时依赖。如果将 Lombok 声明为 implementation,可能导致构建环境下生成代码正常,但运行环境下出现问题。


二、Gradle Lombok 配置详解

在 Gradle 项目中正确配置 Lombok,需要以下步骤:

1. 添加 Lombok 依赖

在项目的 build.gradle.kts 文件中添加 Lombok 依赖:

dependencies {
    compileOnly("org.projectlombok:lombok:1.18.26") // Lombok 编译时依赖
    annotationProcessor("org.projectlombok:lombok:1.18.26") // Lombok 注解处理器
}

说明

  • compileOnly 表示 Lombok 仅在编译时生效,不会出现在运行时依赖中。
  • annotationProcessor 用于在编译期间启用 Lombok 的注解处理器。

2. 配置 Maven Publish 插件

为将项目发布到私有 Maven 仓库,需要引入 maven-publish 插件,并进行相关配置:

plugins {
    id("java")
    `maven-publish` // 引入 Maven Publish 插件
}

publishing 块中指定发布内容和私有仓库地址:

publishing {
    publications {
        create<MavenPublication>("mavenJava") {
            from(components["java"]) // 发布 Java 构件
        }
    }
    repositories {
        maven {
            url = uri("http://192.168.100.104:8081/repository/maven-snapshots/") // 私库地址
            credentials {
                username = "your-username" // 替换为你的用户名
                password = "your-password" // 替换为你的密码
            }
            isAllowInsecureProtocol = true // 如果使用 HTTP,允许非安全协议
        }
    }
}

3. 测试依赖配置

为了确保 Lombok 配置完整,建议在 testImplementation 中添加如下配置:

testImplementation(platform("org.junit:junit-bom:5.10.0"))
testImplementation("org.junit.jupiter:junit-jupiter")

同时启用 JUnit Platform:

tasks.test {
    useJUnitPlatform()
}

三、Lombok 依赖声明和发布配置

发布到私库的 JAR 包中可能需要 Lombok 的依赖声明,特别是在下游项目需要依赖 Lombok 时。

1. 确保 Lombok 的依赖信息

在发布的 pom.xml 文件中明确声明 Lombok 依赖:

publishing {
    publications {
        create<MavenPublication>("mavenJava") {
            from(components["java"])
            pom {
                dependencies {
                    dependency {
                        groupId = "org.projectlombok"
                        artifactId = "lombok"
                        version = "1.18.26"
                        scope = "compile"
                    }
                }
            }
        }
    }
}

四、验证发布结果

完成配置后,验证发布的构件是否包含完整的生成代码和依赖信息。

1. 检查生成的 JAR 包内容

运行以下命令解压 JAR 包,检查是否包含 Lombok 生成的代码(如 getCode() 方法):

jar -tvf your-published-artifact.jar

2. 使用 javap 查看字节码

使用 javap 工具检查编译后的类文件:

javap -p -classpath your-published-artifact.jar package.path.to.QueryTopicDetailRequest

确认是否生成了 getter/setter 和构造器等代码。


五、完整配置示例

以下是一个完整的 Gradle 配置文件示例,结合了上述配置:

plugins {
    id("java")
    `maven-publish`
}

group = "site.achun.biz.share"
version = "1.0-SNAPSHOT"

repositories {
    mavenCentral()
}

dependencies {
    compileOnly("org.projectlombok:lombok:1.18.26")
    annotationProcessor("org.projectlombok:lombok:1.18.26")
    implementation("org.springframework:spring-web:6.0.10")
    testImplementation(platform("org.junit:junit-bom:5.10.0"))
    testImplementation("org.junit.jupiter:junit-jupiter")
}

tasks.test {
    useJUnitPlatform()
}

publishing {
    publications {
        create<MavenPublication>("mavenJava") {
            from(components["java"])
            pom {
                dependencies {
                    dependency {
                        groupId = "org.projectlombok"
                        artifactId = "lombok"
                        version = "1.18.26"
                        scope = "compile"
                    }
                }
            }
        }
    }
    repositories {
        maven {
            url = uri("http://192.168.100.104:8081/repository/maven-snapshots/")
            credentials {
                username = "your-username"
                password = "your-password"
            }
            isAllowInsecureProtocol = true
        }
    }
}

六、总结

在使用 Lombok 时,正确配置 Gradle 和 Maven 发布至关重要。本文通过详细分析和示例展示了如何确保 Lombok 在开发、编译和发布过程中正常工作,避免常见问题。希望这篇指南能帮助你更高效地管理项目依赖和构建配置。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2310696.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ArcGIS Pro 基于基站数据生成基站扇区地图

在当今数字化的时代&#xff0c;地理信息系统&#xff08;GIS&#xff09;在各个领域都发挥着至关重要的作用。 ArcGIS Pro作为一款功能强大的GIS软件&#xff0c;为用户提供了丰富的工具和功能&#xff0c;使得数据处理、地图制作和空间分析变得更加高效和便捷。 本文将为您…

【Python · Pytorch】Conda介绍 DGL-cuda安装

本文仅涉及DGL库介绍与cuda配置&#xff0c;不包含神经网络及其训练测试。 起因&#xff1a;博主电脑安装了 CUDA 12.4 版本&#xff0c;但DGL疑似没有版本支持该CUDA版本。随即想到可利用Conda创建CUDA12.1版本的虚拟环境。 1. Conda环境 1.1 Conda环境简介 Conda&#xff1…

leetcode:2965. 找出缺失和重复的数字(python3解法)

难度&#xff1a;简单 给你一个下标从 0 开始的二维整数矩阵 grid&#xff0c;大小为 n * n &#xff0c;其中的值在 [1, n2] 范围内。除了 a 出现 两次&#xff0c;b 缺失 之外&#xff0c;每个整数都 恰好出现一次 。 任务是找出重复的数字a 和缺失的数字 b 。 返回一个下标从…

Android U 分屏——SystemUI侧处理

WMShell相关的dump命令 手机分屏启动应用后运行命令&#xff1a;adb shell dumpsys activity service SystemUIService WMShell 我们可以找到其中分屏的部分&#xff0c;如下图所示&#xff1a; 分屏的组成 简图 分屏是由上分屏(SideStage)、下分屏(MainStage)以及分割线组…

flink集成tidb cdc

Flink TiDB CDC 详解 1. TiDB CDC 简介 1.1 TiDB CDC 的核心概念 TiDB CDC 是 TiDB 提供的变更数据捕获工具&#xff0c;能够实时捕获 TiDB 集群中的数据变更&#xff08;如 INSERT、UPDATE、DELETE 操作&#xff09;&#xff0c;并将这些变更以事件流的形式输出。TiDB CDC 的…

推荐1款OCR的扫描仪软件,无需安装,打开即用!

聊一聊 现在日常办公&#xff0c;很多时候还是需要扫描仪配合。 很多时候需要将文件搜索成PDF再传输。 今天给大家分享一款OCR扫描仪软件。 软件介绍 OCR的扫描仪软件 支持扫描仪共享。 支持WIA、TWAIN、SANE和ESCL驱动程序。 还可以批量多扫描仪配置扫描&#xff0c;支持…

SpringBoot为什么默认使用CGLIB?

大家好&#xff0c;我是锋哥。今天分享关于【SpringBoot为什么默认使用CGLIB?】面试题。希望对大家有帮助&#xff1b; SpringBoot为什么默认使用CGLIB? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Spring Boot 默认使用 CGLIB&#xff08;Code Generation Li…

神经网络|(十三)|SOM神经网络

【1】引言 前序已经对神经网络有了基础认识&#xff0c;今天先学习SOM神经网络。 前序学习文章链接包括且不限于&#xff1a; 神经网络|(十一)|神经元和神经网络-CSDN博客 神经网络|(十二)|常见激活函数-CSDN博客 【2】SOM神经网络 SOM神经网络是一种结构比较简单、但是理…

IP协议、DNS协议、DHCP协议、Telent协议的记忆总结

首先记忆一下几个协议的端口号 HTTP&#xff1a;超文本传输协议 80 HTTPS&#xff1a;安全传输协议 443 DHCP&#xff1a;动态主机配置协议 67/68 DNS&#xff1a;域名解析协议 53 FTP&#xff1a;文件传输协议 20/21 TFTP&#xff1a;简单文件传输协议 69 TELENT&#xff1a;远…

Pico 4 Enterprise(企业版)与Unity的交互-有线串流调试篇

入手了Pico 4 E做VR开发&#xff0c;谁知入了天坑...根据官方文档&#xff0c;尝试了串流助手、企业串流、PICO Developer Center&#xff0c;陷入了各种版本问题、环境问题的陷阱。而且Pico4E的OS自24年12开始就不再更新&#xff0c;头盔中预装的企业串流版本也较低&#xff0…

DeepSeek-R1:使用KTransformers实现高效部署指南

KTransformers作为一个开源框架&#xff0c;专门为优化大规模语言模型的推理过程而设计。它支持GPU/CPU异构计算&#xff0c;并针对MoE架构的稀疏性进行了特别优化&#xff0c;可以有效降低硬件要求&#xff0c;允许用户在有限的资源下运行像DeepSeek-R1这样庞大的模型。 硬件…

任务9:交换机基础及配置

CSDN 原创主页&#xff1a;不羁https://blog.csdn.net/2303_76492156?typeblog 一、交换机基础 交换机的概念&#xff1a;交换机是一种网络设备&#xff0c;用于连接多台计算机或网络设备&#xff0c;实现数据包在局域网内的快速交换。交换机基于MAC地址来转发数据包&#x…

Notepad++ 8.6.7 安装与配置全攻略(Windows平台)

一、软件定位与核心优势 Notepad 是开源免费的代码/文本编辑器&#xff0c;支持超过80种编程语言的高亮显示&#xff0c;相比系统自带记事本具有以下优势&#xff1a; 轻量高效&#xff1a;启动速度比同类软件快30%插件扩展&#xff1a;支持NppExec、JSON Viewer等200插件跨文…

SpringMVC请求处理流程:DispatcherServlet工作原理

文章目录 引言一、DispatcherServlet概述二、DispatcherServlet初始化过程三、请求接收与处理器匹配四、请求参数绑定与处理器执行五、视图解析与渲染六、异常处理机制总结 引言 SpringMVC框架是Java Web开发中最流行的MVC框架之一&#xff0c;其核心组件DispatcherServlet作为…

解锁数据潜能,永洪科技以数据之力简化中粮可口可乐决策之路

企业数字化转型是指企业利用数字技术和信息通信技术来改变自身的商业模式、流程和增值服务&#xff0c;以提高企业的竞争力和创新能力。数字化转型已经成为企业发展的重要战略&#xff0c;尤其在当前信息技术高速发展的时代。数字化转型还涉及到企业与消费者之间的互动和沟通。…

双链路提升网络传输的可靠性扩展可用带宽

为了提升网络传输的可靠性或增加网络可用带宽&#xff0c; 通常使用双链路冗余备份或者双链路聚合的方式。 本文介绍几种双链路网络通信的案例。 5GWiFi冗余传输 双Socket绑定不同网络接口&#xff1a;通过Android的ConnectivityManager绑定5G蜂窝网络和WiFi的Socket连接&…

前端性能优化之同时插入100000个元素页面不卡顿

面试官&#xff1a;同时插入100000个元素怎么让页面不卡顿 优化前写法 首先我们来看下面的一段&#xff0c;点击按钮后&#xff0c;循环100000次&#xff0c;每次都插入一个元素&#xff0c;并且插入区域上方还有一个小球在滚动&#xff0c;在插入的过程中我们可以观察小球的…

Exoplayer2源码编译FFmpeg拓展模块实现音频软解码

在前面文章最新版本Exoplayer扩展FFmpeg音频软解码保姆级教程中介绍了最新版本的Exoplayer(androidx.Media3)编译FFmpeg模块的流程&#xff0c;有就是media3版本的explayer最低支持的sdk版本是21也就是Android5.x,但是市面上还是有很多IOT设备是很老的android4.4(sdk19)的&…

Docker安装嵌入框架Text Embeddings Inference (TEI)

Docker安装Text Embeddings Inference (TEI) 1 简单介绍 文本嵌入推理&#xff08;TEI&#xff0c;Text Embeddings Inference &#xff09;是HuggingFace研发的一个用于部署和服务开源文本嵌入和序列分类模型的工具包。TEI兼容OpenAI的嵌入模型的规范。 # 官网地址 https:/…

MAUI(C#)安卓开发起步

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 源码指引&#xff1a;github源…