yegor256/qulice

GitHub: yegor256/qulice

Qulice 是一款面向 Java 项目的静态分析聚合工具,将 Checkstyle、PMD 和 ErrorProne 整合为单一 Maven 插件,通过锁定规则集强制执行统一的代码质量标准。

Stars: 321 | Forks: 121

# 集成在一个 Maven 插件中的 Checkstyle 和 PMD [![此处遵循 EO 原则](https://www.elegantobjects.org/badge.svg)](https://www.elegantobjects.org) [![由 Rultor.com 提供的 DevOps](https://www.rultor.com/b/yegor256/qulice)](https://www.rultor.com/p/yegor256/qulice) [![我们推荐 IntelliJ IDEA](https://www.elegantobjects.org/intellij-idea.svg)](https://www.jetbrains.com/idea/) [![mvn](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/8428b43879072231.svg)](https://github.com/yegor256/qulice/actions/workflows/mvn.yml) [![PDD 状态](https://www.0pdd.com/svg?name=yegor256/qulice)](https://www.0pdd.com/p?name=yegor256/qulice) [![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.qulice/qulice/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.qulice/qulice) [![codecov](https://codecov.io/gh/yegor256/qulice/branch/master/graph/badge.svg)](https://codecov.io/gh/yegor256/qulice) [![Hits-of-Code](https://hitsofcode.com/github/yegor256/qulice)](https://hitsofcode.com/view/github/yegor256/qulice) [![许可证](https://img.shields.io/badge/license-MIT-green.svg)](https://github.com/yegor256/qulice/blob/master/LICENSE.txt) Qulice 是一个针对 Java 项目的静态分析质量控制工具。它结合了所有最好的静态分析工具 并对其进行预配置,包括 [Checkstyle](https://checkstyle.sourceforge.io/)、 [PMD](https://pmd.github.io/) 和 [ErrorProne](https://errorprone.info/)。 您不再需要单独使用和配置它们。 ErrorProne 在由 Qulice 生成的分叉 `javac` 进程中运行,因此您的项目中不需要 额外的 JVM 标志。可以通过 `@SuppressWarnings("CheckName")`(标准的 ErrorProne 机制) 抑制单个检查,或者通过 `errorprone:` 排除项跳过整个路径,例如 `errorprone:.*/generated/.*`。 在 [www.qulice.com](https://www.qulice.com) 阅读更多内容。 此外,请先阅读此博客文章: [_Strict Control of Java Code Quality_](https://www.yegor256.com/2014/08/13/strict-code-quality-control.html)。 只需将此插件添加到您的 `pom.xml` 中: ``` com.qulice qulice-maven-plugin 0.27.6 file:${basedir}/LICENSE.txt check ``` 另外请记住,我们支持 Maven 3.1+。 许可证的路径必须以以下格式声明: `file:${basedir}/LICENSE.txt`,这是默认值,可以使用任何完整路径 代替 `${basedir}`。 请阅读这篇关于您在项目中可能遇到的 [典型错误](https://github.com/yegor256/qulice/wiki/mistakes) 的简短摘要。 为了下载 XML 验证所需的 schema,您可能需要配置代理。 不支持 Maven 代理,但标准的 [JVM 代理](https://docs.oracle.com/javase/8/docs/technotes/guides/net/proxies.html) 可以正常工作。要使用它,只需将 `-Dhttp.proxyHost=HOST -Dhttp.proxyPort=PORT` 添加到您的 `MAVEN_OPTS` 环境变量或 Maven 命令中,例如 `mvn clean verify -Dhttp.proxyHost=HOST -Dhttp.proxyPort=PORT`。 ## 架构 Qulice 将 [Checkstyle](https://checkstyle.sourceforge.io/)、 [PMD](https://pmd.github.io/) 和 [ErrorProne](https://errorprone.info/) 聚合在一个单一的 [Maven](https://maven.apache.org/) `verify` 阶段目标 `check` 背后。 与将每个工具作为具有自身配置文件的单独 Maven 插件运行不同,Qulice 不需要在 `pom.xml` 中进行每个工具的设置。 捆绑的规则集是锁定的:所有采用的项目共享相同的 [Checkstyle](https://checkstyle.sourceforge.io/) 和 [PMD](https://pmd.github.io/) 配置。 这与单独使用的 [Spotless](https://github.com/diffplug/spotless) 或 [Checkstyle Maven 插件][csmp] 不同,后两者 都允许按项目自定义规则。 [Checkstyle](https://checkstyle.sourceforge.io/) 配置 (`checks.xml`)和 [PMD](https://pmd.github.io/) 规则集 (`ruleset.xml`)作为 classpath 资源打包在 Qulice JAR 中, 不能被采用的项目覆盖。 项目只能通过 `` 参数抑制特定检查;它们不能添加或重新定义规则。 这是用灵活性换取一致性:代码审查风格期望 在使用 Qulice 的每个存储库中都是完全相同的。 `com.qulice.spi` 包定义了 Maven 和代码检查逻辑之间的扩展边界。 `Environment` 暴露了项目结构(基础目录、classpath、 源文件、排除模式)而不泄露 Maven 内部细节, 使得验证器可以在没有 Maven runtime 的情况下进行单元测试。 `ResourceValidator` 接受一个 `Collection` 并返回 `Collection`;`Validator` 消费完整的 `Environment`, 用于需要更广泛项目上下文的检查。 [Checkstyle](https://checkstyle.sourceforge.io/)、 [PMD](https://pmd.github.io/) 和 [ErrorProne](https://errorprone.info/) 在 `CheckMojo` 的 一个五线程 `ExecutorService` 中并发运行。 每个验证器都作为 `Callable>` 提交, 并通过 `Future` 收集结果。 一个可配置的超时时间(默认十分钟,可通过 `qulice.check-timeout` 覆盖)可防止挂起的验证器无限期地 阻塞构建。 [ErrorProne](https://errorprone.info/) 需要 `--add-exports` 和 `--add-opens` JVM 标志来访问内部 `jdk.compiler` API。 Qulice 没有将这些标志注入到 Maven 自己的 JVM 中(这 将需要每个采用项目都有一个 `.mvn/jvm.config`), 而是通过 [Jaxec](https://github.com/yegor256/jaxec) 派生一个单独的 `javac` 进程。 这些标志仅应用于派生的进程;Maven 的 JVM 保持不变。 在并行代码检查之后,五个特定于 Maven 的验证器按 顺序运行:`PomXpathValidator` 根据用户提供的 [XPath](https://www.w3.org/TR/xpath/) 表达式检查 `pom.xml`; `EnforcerValidator` 委托给 [maven-enforcer-plugin][mep] 以 验证 JDK 和 Maven 版本;`DependenciesValidator` 使用 [maven-dependency-analyzer][mda] 来查找未使用或未声明的 编译范围依赖;`DuplicateFinderValidator` 检测 跨 classpath JAR 的重复类;以及 `SnapshotsValidator` 拒绝生产构建中的 SNAPSHOT 依赖。 [Checkstyle](https://checkstyle.sourceforge.io/) 和 [PMD](https://pmd.github.io/) 都扩展了自定义规则。 `com.qulice.checkstyle` 包包含大约四十个自定义的 `AbstractCheck` 实现(例如 `ConstructorsOrderCheck`、 `IfThenThrowElseCheck`),涵盖了标准 [Checkstyle](https://checkstyle.sourceforge.io/) 目录中所缺少的约束。 `com.qulice.pmd.rules` 包添加了自定义的 `AbstractJavaRule` 实现(例如 `UnitTestContainsTooManyAssertsRule`、 `ProhibitPlainJunitAssertionsRule`),它们替换了上游 [PMD](https://pmd.github.io/) 规则,这些规则在上游问题追踪器中 已被提交了已知的误报缺陷。 ## 如何贡献 派生存储库,进行更改,向我们发送 pull request。我们将审查 您的更改,如果不违反我们的质量标准,我们会将它们 应用到 `master` 分支。为避免受挫,在向我们 发送 pull request 之前,请运行完整的 Maven 构建: ``` mvn clean install -Pqulice ``` 请记住,JDK 17+ 和 Maven 3.8+ 是您可以使用的最低版本。
标签:Checkstyle, ErrorProne, JS文件枚举, Maven插件, PMD, SonarQube替代, 代码审查, 代码规范, 域名枚举, 安全专业人员, 实时流处理, 错误基检测, 静态代码分析