当前位置: 首页 > 知识库问答 >
问题:

Maven Lombok的范围(编译与提供)

冯鸿光
2023-03-14

我最近发现龙目山。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

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

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

共有3个答案

左丘修齐
2023-03-14

可以使用编译truefor

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

请参见Maven-可选依赖和依赖排除。

拓拔嘉颖
2023-03-14

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

景元忠
2023-03-14

Lombok应该在提供的范围内使用(参见官方文档)。

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

 类似资料:
  • 在为android项目添加新的依赖项时,特别是在中,在中,有三个作用域选项compile/provide/apk。

  • 问题内容: 我最近开始学习python3。 在 python 2 中,可以使用函数来分配列表元素。 如使用功能时在 python 3 中一样 为什么会这样呢? python为什么要进行此更改? 是恩赐还是祸根? 问题答案: Python 3 在很多地方使用了 迭代器 ,而 python 2 使用了 列表 。文档给出了详细的解释,包括对的更改。 优点是,如果您使用大范围的迭代器或映射, Python

  • 在弹性搜索中,我正在努力使助推按我所希望的方式工作。 假设我有一些包含性别、兴趣和年龄的索引配置文件,假设我发现性别匹配是最相关的,那么兴趣和最不重要的标准是用户的年龄。我原以为下面的查询会根据刚才提到的原则导致匹配配置文件的排序,但是当我执行它时,我首先得到一些男性,然后我得到50岁的女性安娜,然后是喜欢汽车的女性玛丽亚。.为什么Maria的分数没有比Anna高?? 我们将不胜感激, 斯汀 以下

  • 我想知道为什么我的简单spring boot项目不再有效。它基本上直接来自spring示例,其中一个控制器说hello world。我使用的是spring boot starter jetty和spring boot v1.1.10(也尝试了1.2.0)。我有一些使用嵌入式solr的单元测试,所以solr核心被标记为<代码> 我认为测试范围的依赖关系不应该干扰编译范围的依赖关系,并且“仅适用于测试

  • 我们将只实现 Memcached 协议的一个子集,这足够我们进行添加、检索、删除对象;在 Memcached 中是通过执行 SET,GET,DELETE 命令来实现的。Memcached 支持很多其他的命令,但我们只使用其中三个命令,简单的东西,我们才会理解的更清楚。 Memcached 有一个二进制和纯文本协议,它们都可以用来与 Memcached 服务器通信,使用什么类型的协议取决于服务器支持

  • 问题内容: 在Angularjs中,是否有特定的原因要在控制器中使用,并且要在指令链接函数中使用(不使用)?这仅仅是公约还是其他? 问题答案: 该情况下,当你在控制器的依赖注入范围内喷射基于匹配变量名使用,在这种情况下,因为名字是行不通的。 对于指令的情况下,注塑基于位置,所以你可以命名你的变量或或任何东西。链接功能的指令顺序为 因此,第一个元素始终是作用域对象。