我最近发现lombok.jar最终出现在我们的最终工件中,这应该是不必要的。据我所知,lombok只是编译时。
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.14.4</version>
</dependency>
但是当我将其设置为提供的范围时,我在单元测试中得到了奇怪的行为。它们在尝试解析时会因ClassNotFoundException而崩溃
java.lang.NoClassDefFoundError: com/svv/esp/serviceimpl/dataimport/common/validation/LongValidator
Lombok岛通常使用哪个maven范围?
我在MacOSX 10.9上使用Oracle JDK build 1.8.0_25-b17
4条答案
按热度按时间bfnvny8b1#
Lombok应在
provided
范围内使用(参见official docs)。原因(如注解中所述)是lombok是一个仅编译时工具。也就是说,在运行时根本不需要它。通过将作用域设置为
provided
,您可以使编译器可以使用lombok库,但它不是编译后的jar的依赖项。因此,您的最终jar将不依赖于Lombok,并且不需要包含在任何部署中,这减少了可部署文件的依赖性和大小。avkwfej42#
可以使用
compile
和true
来处理<optional/>
。参见Maven – Optional Dependencies and Dependency Exclusions。
ryevplcw3#
您必须配置spring-boot-maven-plugin以从Spring可执行jar文件中排除lombok jar。
下面是一个来自pom.xml的插件配置示例:
hpcdzsge4#
通常是
compile
。provided
用于jar,这些jar通常与将承载应用程序的应用程序服务器一起提供。如果你不想在最终的应用程序中使用jar,那么最好使用maven插件而不是直接使用jar:http://awhitford.github.io/lombok.maven/lombok-maven-plugin/index.html