【问题标题】:What is correct Maven scope of findbugs annotations?findbugs 注释的正确 Maven 范围是什么?
【发布时间】:2015-01-08 03:53:59
【问题描述】:

我想使用具有以下依赖关系的库:

<dependency>
  <groupId>com.google.code.findbugs</groupId>
  <artifactId>annotations</artifactId>
  <version>2.0.3</version>
</dependency>

我读到 FindBugs 是用于 Java 代码的静态分析,所以我认为它没有必要包含在应用程序中。使用&lt;scope&gt;provided&lt;/scope&gt;&lt;exclusion&gt;...&lt;/exclusion&gt; 排除jar 是否安全?

排除它的一个原因是公司政策反对 (L)GPL 许可。

【问题讨论】:

  • 您是说要使用的库将 Findbugs 拉入作为传递依赖项?另外 - 你能澄清一下“安全”是什么意思吗?
  • @user944849 是的,findbugs 成为我项目中的传递依赖项。安全我的意思是图书馆应该可以工作并且不会打印关于丢失类的错误。

标签: maven findbugs


【解决方案1】:

是的,您可以安全地排除此库。它仅包含不需要在运行时出现的注释。不过,请注意让它们可用于 FindBugs 分析。

请注意,您还应该列出 jsr305.jar,如下所示:

<dependency>
    <groupId>com.google.code.findbugs</groupId>
    <artifactId>annotations</artifactId>
    <version>3.0.2</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>com.google.code.findbugs</groupId>
    <artifactId>jsr305</artifactId>
    <version>3.0.2</version>
    <scope>provided</scope>
</dependency>

需要两个 JAR 才能使这些注释起作用。

检查 Maven Central 中的 most recent findbugs version

FindBugs 是根据 LGPL 提供的,因此您的公司应该不会有任何问题。此外,您只是使用 FindBugs;你不是在开发从 FindBugs 派生的东西。

【讨论】:

    【解决方案2】:

    理论上,排除 Findbugs 传递依赖项应该是完全安全的(如 OP 的澄清评论中所定义)。如果使用正确,Findbugs 应该只在构建库时使用,而不是使用它。很可能有人忘记将 &lt;scope&gt;test&lt;/scope&gt; 添加到 Findbugs 依赖项中。

    所以 - 继续尝试排除。运行应用程序。您是否收到类路径错误、与不起作用的库相关的应用程序功能,或者在日志中看到似乎是由于没有 Findbugs 可用的消息?如果答案是肯定的,我个人会重新考虑在我的应用程序中使用这个特定的库,并尝试寻找替代方案。

    另外,恭喜您预先进行了类路径检查!作为一般实践,每次在应用程序中包含库时都执行您所做的事情是一个好主意:添加库,然后检查它带来的其他传递依赖项,并在开始时进行任何必要的类路径清理.当我这样做时,我发现它使我的调试会话更短。

    【讨论】:

    • 请注意任何其他人,通过从 POM 中省略它来排除库是不安全的。它需要在那里,但它应该有scope=provided。我读这个答案太快了,完全从 POM 中排除了它,然后遇到了问题。
    猜你喜欢
    • 2016-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-08
    • 2018-06-05
    • 1970-01-01
    • 2017-08-06
    • 1970-01-01
    相关资源
    最近更新 更多