在 Maven 中使用 FindSecBugs 会抛出 java.lang.OutOfMemoryError

Posted

技术标签:

【中文标题】在 Maven 中使用 FindSecBugs 会抛出 java.lang.OutOfMemoryError【英文标题】:Using FindSecBugs in Maven throws java.lang.OutOfMemoryError 【发布时间】:2019-12-31 12:09:23 【问题描述】:

我是 Maven 新手。我正在使用 Mac OSX。我尝试使用 maven 构建项目并且它发生得很好。然后我使用 mvn spotbugs:spotbugs 来使用 spotbugs 插件!花了一段时间并在线程“main”中抛出异常

java.lang.OutOfMemoryError: Java 堆空间。

我尝试的项目是 330 MB,非常大,我暂时无能为力。我在网上尝试了很多解决方案:

1.export MAVEN_OPTS="-Xmx2048m"(我试过增加到12000m还是不行)

2.使用了这个插件

       <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.8.0</version>
        <configuration>
            <fork>true</fork>
            <meminitial>1024m</meminitial>
            <maxmem>8096m</maxmem>
        </configuration>
       </plugin>

还是没用。

谁能指导我完成它?我正在使用 maven spotbugs 版本 3.1.12。

使用 java 11,Maven 3

【问题讨论】:

【参考方案1】:

SpotBugs Maven 插件在其常见问题解答中包含“How do I avoid OutOfMemory errors?”,我假设您已经看过(因为您尝试了MAVEN_OPTS="-Xmx2048m"

但还有一件事

您还可以使用 fork 选项,该选项将用于新的 JVM。然后使用 maxHeap 选项来控制堆大小。

查看docs 是3.1.12.3-SNAPSHOT 中的接缝,fork 选项默认为true。如果3.1.12(或您使用的任何确切版本)是这种情况,并且如果我正确阅读了文档,那么您必须配置maxHeap 其中defaults to 512。

【讨论】:

【参考方案2】:

如上所述,尝试调整 maxHeap 值。

接下来是一个sn-p的maven配置。这就是我配置 spotbugs 以避免内存不足错误的方式。

 <reporting>
    <plugins>
        <plugin>
            <groupId>com.github.spotbugs</groupId>
            <artifactId>spotbugs-maven-plugin</artifactId>
            <version>$spotbugs-maven-plugin.version</version>
            <configuration>
                <effort>Max</effort>
                <threshold>Low</threshold>
                <maxHeap>2048</maxHeap>
            </configuration>
        </plugin>
    </plugins>
</reporting>

【讨论】:

以上是关于在 Maven 中使用 FindSecBugs 会抛出 java.lang.OutOfMemoryError的主要内容,如果未能解决你的问题,请参考以下文章

findsecbugs 报告导入库代码段漏洞的原因

如何在 find-sec-bugs 中仅运行已定义的检测器

为啥在 Maven 中添加依赖项会触发功能?

如何在 spotbugs 中集成 find-sec-bugs?

Maven笔记(更新中)

为啥执行maven命令时,会首先链接远程仓库呢