龙目岛的 Maven Scope (编译 vs. 提供)

2022-08-31 13:57:47

我最近发现龙目岛.jar最终出现在我们最终的神器中,这应该没有必要。在我的理解中,龙目岛只是编译时。

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.14.4</version>
        </dependency>

但是当我将其设置为提供的范围时,我在单元测试中得到了奇怪的行为。他们崩溃与类NotFoundExceptions,然后在尝试解决

java.lang.NoClassDefFoundError: com/svv/esp/serviceimpl/dataimport/common/validation/LongValidator

龙目岛通常使用哪种maven范围?

我在MacOSX 10.9上使用Oracle JDK build 1.8.0_25-b17


答案 1

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

原因(如注释中所述)是龙目岛是一个仅编译时的工具。也就是说,在运行时根本不需要它。通过使作用域 ,您可以使龙目岛库可供编译器使用,但它不是已编译jar的依赖项。因此,您的最终jar将不依赖于Lombok,也不需要包含在任何部署中,这减少了可部署对象的依赖性和大小。provided


答案 2

可以使用 和 for 。compiletrue<optional/>

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

请参见 Maven – 可选依赖项和依赖项排除项


推荐