什么是正确的maven范围的findbugs注释?

hol*_*s83 17 findbugs maven

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

<dependency>
  <groupId>com.google.code.findbugs</groupId>
  <artifactId>annotations</artifactId>
  <version>2.0.3</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

我读到FindBugs用于Java代码的静态分析,所以我虽然没有必要包含在应用程序中.<scope>provided</scope>用一个或用一个<exclusion>...</exclusion>?排除罐子是否安全?

排除它的一个原因是存在针对(L)GPL许可的公司政策.

bar*_*uin 20

是的,您可以安全地排除此库.它仅包含在运行时不需要存在的注释.但是,请注意将它们用于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>
Run Code Online (Sandbox Code Playgroud)

两个JAR都需要使这些注释有效.

查看Maven Central中最新的findbugs版本.

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


use*_*849 2

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

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

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

  • 请注意,通过从 POM 中省略该库来排除该库是不安全的。它需要在那里,但它应该有 `scope=provided`。我读这个答案的速度太快,完全将其从 POM 中排除,然后遇到了问题。 (10认同)