龙目岛的美芬范围(编译与提供)

我最近发现 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

25378 次浏览

通常是 compileprovided用于通常与承载应用程序的应用服务器一起提供的 jar。如果您不想在最终的应用程序中使用 jar,那么最好直接使用 maven 插件而不是 jar: http://awhitford.github.io/lombok.maven/lombok-maven-plugin/index.html

龙目岛应在 provided范围内使用(见 官方文件)。

原因(如注释中所述)是 Lombok 是一个仅在编译时使用的工具。也就是说,在运行时 完全没有不需要它。通过设置范围 provided,可以让编译器使用 Lombok 库,但是它是编译的 jar 的一个依赖项 没有。因此,最终的 jar 将不依赖于龙目岛,也不需要包含在任何部署中,这将减少可部署性的依赖性和大小。

对于 <optional/>,可以使用 compiletrue

<scope>compile</scope>
<optional>true</optional>

参见 Maven-可选的依赖项和依赖项排除