我想使用具有以下依赖关系的库:
<dependency>
<groupId>com.google.code.findbugs</groupId>
<artifactId>annotations</artifactId>
<version>2.0.3</version>
</dependency>
我读到FindBugs用于Java代码的静态分析,所以我认为没有必要包含在应用程序中。使用<scope>provided</scope>
或<exclusion>...</exclusion>
排除它的一个原因是存在针对(L)GPL许可的公司政策。
答案 0 :(得分:18)
是的,您可以安全地排除此库。它仅包含在运行时不需要存在的注释。但要注意让它们可用于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派生的东西。
答案 1 :(得分:2)
理论上,排除Findbugs的传递依赖应该是完全安全的(如OP的澄清评论中所定义的)。如果使用正确,只应在构建库时使用Findbugs,而不是使用它。很可能有人忘记将<scope>test</scope>
添加到Findbugs依赖项中。
所以 - 继续尝试排除。运行该应用程序。您是否获得类路径错误,与库不相关的应用程序功能,或者看到日志中的消息似乎是由于没有Findbugs可用?如果答案是肯定的,我个人会重新考虑在我的应用程序中使用这个特定的库,并试图找到替代方案。
另外,祝贺前面的classpath检查!作为一般做法,每次在应用程序中包含库时都要做好自己的工作:添加库,然后检查它带来的其他传递依赖项,并在开始时进行必要的类路径清理。 。当我这样做时,我发现它使我的调试会话更短。