{"id":19270039,"url":"https://github.com/yonyong/sonar-custom-pmd-plugin","last_synced_at":"2025-06-11T04:02:20.513Z","repository":{"id":105375190,"uuid":"565375766","full_name":"yonyong/sonar-custom-pmd-plugin","owner":"yonyong","description":"由于目前自定义sonar插件开发没有统一的框架，实现比较复杂， 因此开发了此骨架项目。开发者可以按照文档步骤新增自定义的sonar插件。","archived":false,"fork":false,"pushed_at":"2022-11-15T12:50:01.000Z","size":350,"stargazers_count":7,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-01T16:05:40.439Z","etag":null,"topics":["custom-plugin","java","p3c","pmd","sonar-plugin","sonarqube","sonarqube-plugin","static-analyzer","static-code-analysis"],"latest_commit_sha":null,"homepage":"https://github.com/yonyong/sonar-custom-pmd-plugin","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/yonyong.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-11-13T07:40:02.000Z","updated_at":"2024-11-04T06:43:27.000Z","dependencies_parsed_at":null,"dependency_job_id":"a86734bd-6bea-49f8-8318-4cda337e95bf","html_url":"https://github.com/yonyong/sonar-custom-pmd-plugin","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yonyong%2Fsonar-custom-pmd-plugin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yonyong%2Fsonar-custom-pmd-plugin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yonyong%2Fsonar-custom-pmd-plugin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yonyong%2Fsonar-custom-pmd-plugin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/yonyong","download_url":"https://codeload.github.com/yonyong/sonar-custom-pmd-plugin/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250128458,"owners_count":21379515,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["custom-plugin","java","p3c","pmd","sonar-plugin","sonarqube","sonarqube-plugin","static-analyzer","static-code-analysis"],"created_at":"2024-11-09T20:23:00.855Z","updated_at":"2025-04-21T20:33:23.455Z","avatar_url":"https://github.com/yonyong.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"*_[EN](https://github.com/yonyong/sonar-custom-pmd-plugin/blob/master/README_EN.md) | 中文_*\n# 前言\n## - 项目\n自定义sonarPMD插件-骨架\n## - 介绍\n目前sonar基于各版本的自定义PMD插件兼容性不太理想。\n因此，针对7.9版本sonar实现了一个自定义sonarPMD插件的骨架项目。  \n主要基于下面两个项目进行源码修改：  \nhttps://github.com/alibaba/p3c/tree/master/p3c-pmd  \nhttps://github.com/jborgers/sonar-pmd/tree/master\n## - 适用版本\nsonar版本7.9\n## - 模块介绍\nintegration-test 集成测试模块  \nsonar-pmd-custom-rules 自定义规则模块  \nsonar-pmd-plugin 生成sonar插件模块\n## - 其他\nsonar-pmd-custom-rules模块负责自定义sonar规则，规则编写验证完毕后，install到本地仓。  \nsonar-pmd-plugin模块负责集成sonar-pmd-custom-rules模块，打包生成sonar插件。\n\n如果不需要额外定义规则集，从[2.开发一个自定义规则](#idname)开始即可。\n# 1. 自定义规则集\n```$xslt\n模块: sonar-pmd-custom-rules\n\n1. 在/resources/rulesets/java下的ali-set.xml后面新增一个文件 custom.xm\n2. 修改pom文件，添加规则集：\n\u003cruleset...\u003c/ruleset\u003e\n\u003cruleset\u003erulesets/java/custom.xml\u003c/ruleset\u003e\n3. 修改pom文件,在插件中添加依赖, 代码片段如下:\n\u003cdependencies\u003e\n  \u003cdependency\u003e\n    \u003cgroupId\u003ecom.alibaba.p3c\u003c/groupId\u003e\n    \u003cartifactId\u003ep3c-pmd\u003c/artifactId\u003e\n    \u003cversion\u003e2.0.1\u003c/version\u003e\n  \u003c/dependency\u003e\n  \u003cdependency\u003e\n    \u003cgroupId\u003etop.yonyong\u003c/groupId\u003e\n    \u003cartifactId\u003esonar-pmd-custom-rules\u003c/artifactId\u003e\n    \u003cversion\u003e1.0.0\u003c/version\u003e\n  \u003c/dependency\u003e\n\u003c/dependencies\u003e\n4. 修改pom文件，注释掉gpg插件\n5. 执行maven命令: clean install 规则集添加完成。\n```\n# \u003ca href=\"#idname\"\u003e2.开发一个自定义规则\u003c/a\u003e\n\n```$xslt\n模块: sonar-pmd-custom-rules\n\n1. 添加一个自定义规则，例如：top.yonyong.sonar.pmd.lang.java.rule.custom.MyFirstTestRule\n2. 在 src\\main\\resources\\messages.xml 和 messages_en.xml文件中，新增规则校验失败后报告的信息\n3. 在src\\main\\resources\\rulesets\\java\\custom.xml中注册自定义的规则\n```\n# 3.测试你的规则\n\n```$xslt\n模块: sonar-pmd-custom-rules\n\n1. 在 test/src/java/下添加一个测试类，例如：top.yonyong.sonar.pmd.lang.java.rule.custom.MyFirstTestRuleTest\n2. 添加一个测试对象xml：src\\test\\resources\\top\\yonyong\\sonar\\pmd\\lang\\java\\rule\\custom\\xml\\MyFirstTestRule.xml\n3. 在上一步的测试xml中，编写测试用例、预期结果\n4. 执行测试\n```\n# 4.在sonar中导入你的规则\n\n```$xslt\n模块: sonar-pmd-custom-rules\n1. 执行maven命令: mvn clean insall\n\n模块: sonar-pmd-plugin\n2. 在 src\\main\\resources\\org\\sonar\\plugins\\pmd\\rules-custom.xml中添加自定义的规则\n3. 在src\\main\\resources\\org\\sonar\\l10n\\pmd.properties中注册规则名称\n4. 执行maven命令: mvn clean package\n5. 将打包出来的jar包上传至sonar插件目录下(extensions/plugins/)\n6. 重启sonar\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyonyong%2Fsonar-custom-pmd-plugin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyonyong%2Fsonar-custom-pmd-plugin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyonyong%2Fsonar-custom-pmd-plugin/lists"}