为啥 Maven 命令“mvn sonar:sonar”在我的“pom.xml”中没有任何插件配置就可以工作?

Posted

技术标签:

【中文标题】为啥 Maven 命令“mvn sonar:sonar”在我的“pom.xml”中没有任何插件配置就可以工作?【英文标题】:Why does the Maven command "mvn sonar:sonar" work without any plugin configuration in my "pom.xml"?为什么 Maven 命令“mvn sonar:sonar”在我的“pom.xml”中没有任何插件配置就可以工作? 【发布时间】:2013-02-05 10:26:51 【问题描述】:

我的仓库中有一个 Maven Web 项目。

我是一个 Maven 菜鸟,但我仍然理解这样一个事实,即我们需要配置一些插件,然后我们才能运行插件特定的命令。

事实:

我有一个声纳服务器在我的本地机器上运行,端口为 9000。

我没有在我的 POM.xml 中添加任何声纳特定插件

参考:

http://www.sonarsource.org/we-had-a-dream-mvn-sonarsonar/

观察:

但是当我从命令行在我的项目中运行mvn sonar:sonar 时,它仍然可以正常工作。

事实是我还没有在我的 POM.xml 中配置声纳插件,即使那样 Maven 正在从哪里获取并理解“声纳:声纳”目标/命令?

问题/好奇:

我不想要声纳本身的工作知识。我想知道为什么mvn sonar:sonar 没有在我的 pom.xml 中配置声纳插件就可以工作

为什么以及如何?

【问题讨论】:

【参考方案1】:

Sonar 有自己的一组插件(例如 maven-checkstyle-plugin),它在被调用时正在运行。这些插件会根据您配置的 Sonar 服务器中的项目设置自动配置。

在您的声纳实例中进行受控配置背后的原因。

它自动为您工作的原因是您使用的是声纳服务器安装的默认值 (localhost:9000)。

此“零配置”方法在此处进一步详细说明:We had a dream : mvn sonar:sonar

【讨论】:

不,Sonar 直接执行 Checkstyle、PMD、Findbugs 等代码分析器,不依赖相关的 Maven 插件。它允许支持非 Maven 环境。此外,Sonar 还嵌入了自己的增强型代码分析器以供参考。 感谢西蒙直言不讳。【参考方案2】:

原因是 Sonar Maven 插件托管在 Codehaus Mojo project 并受益于 groupId“org.codehaus.mojo”。这允许使用快捷方式“sonar:sonar”而不是“org.codehaus.mojo:sonar-maven-plugin::sonar”(请参阅​​Maven documentation 的“配置 Maven 以搜索插件”部分)

【讨论】:

还是不明白.. 为什么有 groupId "org.codehaus.mojo" 让我们使用快捷方式? @levgen org.apache.maven.plugins 和 org.codehaus.mojo 是特殊的组 ID。见maven.apache.org/guides/introduction/…最后一节 这并没有回答关于 mvn sonar:sonar 在 pom 中未提及插件时如何执行的问题?我认为 OP 不想问sonar 是如何解决的。 @BreakingBenjamin 你的问题似乎是关于 Maven 本身,而不是关于 SonarQube。【参考方案3】:

我可能是错的,但我的假设是此功能通常来自您的settings.xml,而不是我们使用 Maven 的pom.xml 文件。我假设<id>sonar</id> 部分指定了运行mvn 时调用的配置文件的名称。

目前这只是一个猜测,而不是一个确定的答案,因为其他答案似乎没有达到目标,而我目前没有时间自己深入研究真正的答案。

【讨论】:

【参考方案4】:

我可能是错的,但我的假设是此功能通常来自您的settings.xml,而不是我们使用 Maven 的pom.xml 文件。我假设<id>sonar</id> 部分指定了运行mvn 时调用的配置文件的名称。

目前这只是一个猜测,而不是一个确定的答案,因为其他答案似乎没有达到目标,而我目前没有时间自己深入研究真正的答案。

参考资料:

https://docs.sonarqube.org/latest/analysis/scan/sonarscanner-for-maven/

【讨论】:

【参考方案5】:

根据此页面 - https://docs.sonarqube.org/latest/analysis/scan/sonarscanner-for-maven/

Maven 项目扫描器默认使用 SonarScanner。所以它无需任何设置即可工作。

【讨论】:

以上是关于为啥 Maven 命令“mvn sonar:sonar”在我的“pom.xml”中没有任何插件配置就可以工作?的主要内容,如果未能解决你的问题,请参考以下文章

我的JDK和Maven都是配置好的,为啥还是提示“mvn”不是内部命令呢?

为啥创建maven项目会报错

为啥eclipse能显示effective pom

maven工程为啥打成jar包能用在war包上用不了

为啥输入mvn后仍提示不是内部命令

为啥 Maven 使用 JDK 1.6 但我的 java -version 是 1.7