我最近发现lombok.jar最终出现在我们的最终工件中,这不应该是必要的。据我所知,lombok只是编译时。
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.14.4</version>
</dependency>
但是当我将它设置为提供的范围时,我在单元测试中会遇到奇怪的行为。在尝试解析
时,它们会与ClassNotFoundExceptions崩溃java.lang.NoClassDefFoundError: com/svv/esp/serviceimpl/dataimport/common/validation/LongValidator
lombok通常使用哪种maven范围?
我在MacOSX 10.9上使用Oracle JDK build 1.8.0_25-b17
答案 0 :(得分:66)
Lombok应该在provided
范围内使用(请参阅official docs)。
原因(正如评论中所述)是lombok是一个仅编译时的工具。也就是说,在运行时根本不需要它。通过创建范围provided
,可以使编译器可以使用lombok库,但不是编译jar的依赖项。因此,您的最终jar将不依赖于Lombok,并且不需要包含在任何部署中,这样可以减少可部署的依赖性和大小。
答案 1 :(得分:6)
通常compile
。 provided
适用于通常随应用程序服务器一起提供的jar。如果您不想在最终应用程序中使用jar,最好是直接使用maven插件而不是jar:http://awhitford.github.io/lombok.maven/lombok-maven-plugin/index.html
答案 2 :(得分:2)
一个人可以将compile
与true
和<optional/>
一起使用。
<scope>compile</scope>
<optional>true</optional>