如何配置Maven以部署去除Lombok处理后的库源码JAR?
嘿,我来给你一步步拆解怎么用Maven配置实现这个需求——把去除Lombok处理后的源码打包并部署到Maven仓库。结合你后来的更新,如果最后确定不需要部署delombok后的源码,那下面对应的sources JAR配置部分可以直接跳过,先给你完整的方案,按需调整就行。
首先你需要在pom.xml里添加Lombok的delombok插件,它负责把带Lombok注解的源码转换成标准Java源码。把这段配置加到<build><plugins>节点下:
<plugin> <groupId>org.projectlombok</groupId> <artifactId>lombok-maven-plugin</artifactId> <version>1.18.30.0</version> <!-- 用最新稳定版即可 --> <executions> <execution> <phase>generate-sources</phase> <!-- 在源码生成阶段自动执行 --> <goals> <goal>delombok</goal> </goals> <configuration> <!-- 指定delombok后源码的输出目录 --> <outputDirectory>${project.build.directory}/delombok/src/main/java</outputDirectory> <!-- 匹配你要处理的源码文件,默认覆盖所有.java文件 --> <includes> <include>**/*.java</include> </includes> <!-- 指定Java版本,和你的项目保持一致 --> <source>17</source> <!-- 换成你的项目实际Java版本,比如8/11/17 --> <target>17</target> </configuration> </execution> </executions> </plugin>
这个配置会在Maven的generate-sources阶段自动把src/main/java下的带Lombok注解的代码转换成标准Java代码,输出到target/delombok/src/main/java目录。
默认情况下,Maven的maven-source-plugin会打包src/main/java下的原始源码。如果你想部署的sources JAR里是delombok后的源码,需要修改这个插件的配置,让它指向我们生成的目录:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> <version>3.3.0</version> <executions> <execution> <id>attach-sources</id> <goals> <goal>jar-no-fork</goal> </goals> <configuration> <!-- 指定要打包的源码目录为delombok生成的目录 --> <sourceDirectory>${project.build.directory}/delombok/src/main/java</sourceDirectory> </configuration> </execution> </executions> </plugin>
这样当你执行mvn deploy的时候,Maven会自动生成包含delombok后源码的sources JAR,并和主JAR一起部署到仓库。
一般来说不需要这么做,因为主JAR是用带Lombok注解的源码编译的(Lombok会在编译时自动处理)。但如果你有特殊需求必须用delombok后的源码编译主JAR,可以修改maven-compiler-plugin的源码目录:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.11.0</version> <configuration> <source>17</source> <target>17</target> <!-- 把编译源码目录换成delombok后的目录 --> <compileSourceRoots> <compileSourceRoot>${project.build.directory}/delombok/src/main/java</compileSourceRoot> </compileSourceRoots> </configuration> </plugin>
再次强调,这个场景很少见,直接用Lombok编译更简洁,除非你有特殊的编译约束。
配置完之后,直接运行:
mvn clean deploy
Maven会自动完成delombok、打包(主JAR+delombok后的sources JAR)、部署到你的Maven仓库的完整流程。
内容的提问来源于stack exchange,提问作者Slavkó Medvediev




