首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我需要添加工件JSR305才能使用14+?

为什么我需要添加工件JSR305才能使用14+?
EN

Stack Overflow用户
提问于 2014-06-17 12:20:56
回答 1查看 8K关注 0票数 7

在寻找关于堆栈溢出的信息时,我看到了一个类似于我的问题,但没有真正的答案这里

我需要将我的maven项目从番石榴11.0.2迁移到番石榴14或更高版本(我需要RangeSet)。我用依赖项更新了maven pom:

代码语言:javascript
复制
<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>14.0</version>
</dependency>

然后运行maven构建,并得到以下错误:

代码语言:javascript
复制
[ERROR] xxx.java: cannot find symbol
[ERROR] symbol  : class Nonnull
[ERROR] location: package javax.annotation

我仔细看了一下,这个注释是与JSR305一起提供的,它依赖于番石榴11.0.2,正如mvn存储库报告的那样。

我发现奇怪的是,番石榴14也依赖于JSR305mvn存储库报道。

如果我将JSR依赖项添加到我的pom中,那么编译就运行得很好:

代码语言:javascript
复制
<dependency>
    <groupId>com.google.code.findbugs</groupId>
    <artifactId>jsr305</artifactId>
    <version>1.3.9</version>
    <scope>provided</scope>
</dependency>

但是,如果番石榴已经依赖于它,我为什么要将这种依赖添加到我的pom中呢?这看起来更像是一个解决办法,而不是一个解决方案,我更愿意理解并使事情变得清晰。

谢谢你的参与。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-17 12:51:10

您需要将其添加为依赖项的原因是,Guava 14将其pom中的依赖定义为:

代码语言:javascript
复制
<dependency>
    <groupId>com.google.code.findbugs</groupId>
    <artifactId>jsr305</artifactId>
    <version>1.3.9</version>
    <scope>provided</scope>
</dependency>

您的问题的重要部分是<scope>provided</scope>行。

在maven 网站中,它们声明了有关provided依赖项的以下内容:

提供了:这很像compile__,但表示您希望JDK或容器在运行时提供依赖关系。例如,在为构建web应用程序时,您将将对Servlet和相关Java的依赖设置为provided范围,因为web容器提供了这些类。此范围仅在编译和测试类路径上可用,且不可传递。

因此,基本上,因为番石榴已经将其设置为provided依赖,所以他们希望无论是谁在消费番石榴,都会提供这种依赖,这正是您必须做的。

在Guava11.0.2中,它是一个普通的compile依赖项,因此您不必在自己的项目中提供它。

改变是在番石榴13。来自发布说明

使findbug成为一个提供的依赖项,以避免在使用findbug 2.0时发生dep冲突。这一变化的副作用是,依赖番石榴授权“免费”访问JSR-305注释的项目将中断,除非它们提供自己对该jar (或等效的)的直接依赖。项目应该一直直接依赖于JSR-305 (每个maven最佳实践),但是这种改变应该成为必须的。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24263673

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档