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

时间:2015-04-01 08:16:14

标签: java maven lombok

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

3 个答案:

答案 0 :(得分:66)

Lombok应该在provided范围内使用(请参阅official docs)。

原因(正如评论中所述)是lombok是一个仅编译时的工具。也就是说,在运行时根本不需要它。通过创建范围provided,可以使编译器可以使用lombok库,但是编译jar的依赖项。因此,您的最终jar将不依赖于Lombok,并且不需要包含在任何部署中,这样可以减少可部署的依赖性和大小。

答案 1 :(得分:6)

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

答案 2 :(得分:2)

一个人可以将compiletrue<optional/>一起使用。

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

请参见Maven – Optional Dependencies and Dependency Exclusions