{"id":1604,"date":"2026-09-09T17:00:00","date_gmt":"2026-09-09T11:30:00","guid":{"rendered":"https:\/\/swapnilzambare.com\/blog\/salesforce-code-analyzer-pmd\/"},"modified":"2026-09-09T17:00:00","modified_gmt":"2026-09-09T11:30:00","slug":"salesforce-code-analyzer-pmd","status":"publish","type":"post","link":"https:\/\/swapnilzambare.com\/blog\/salesforce-code-analyzer-pmd\/","title":{"rendered":"Salesforce Code Analyzer and PMD: Scan Apex for Security Issues"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Salesforce Code Analyzer is a free scanner that reads your Apex, Lightning, Visualforce and Flow code and reports security and quality problems before they reach production. It bundles well-known engines such as PMD and ESLint, so one command can find a missing sharing keyword, a query inside a loop or a hard-coded secret.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In this post, you will install Code Analyzer, run it from the CLI and VS Code, read its results, and add it to a CI pipeline. It builds on <a href=\"https:\/\/swapnilzambare.com\/blog\/apex-secure-coding-xss-csrf-injection\/\">Apex secure coding<\/a>, <a href=\"https:\/\/swapnilzambare.com\/blog\/apex-crud-and-fls-user-mode\/\">Apex CRUD and FLS<\/a> and <a href=\"https:\/\/swapnilzambare.com\/blog\/salesforce-cli-setup-vs-code\/\">Salesforce CLI and VS Code setup<\/a>. This is the last post of Level 6.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What is Salesforce Code Analyzer?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Salesforce Code Analyzer is a Salesforce CLI plugin and VS Code extension that runs static analysis on your project. Static analysis means it reads the code without running it. Each engine brings rules, and each rule reports a violation with a file, a line, a severity and a link to help.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Think of a spell checker for code. It does not know your story, but it underlines words that look wrong and explains why. You still decide what to fix, but you miss far fewer mistakes.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Why Salesforce Code Analyzer Matters<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Manual reviews miss things, especially in large projects. Here is why Salesforce Code Analyzer matters at Bright Path Tutors.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>First, it flags classes that run queries without a sharing declaration.<\/li>\n\n<li>Also, it finds DML and SOQL that skip CRUD and FLS checks.<\/li>\n\n<li>Next, it spots SOQL and DML inside loops before they hit governor limits.<\/li>\n\n<li>AppExchange partners must scan code before security review.<\/li>\n\n<li>Finally, it runs in CI, so every pull request gets the same checks.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">So the scanner acts as a tireless first reviewer for every change.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">How Salesforce Code Analyzer Works<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Salesforce Code Analyzer follows a clear flow. First, you choose which files to scan with &#8211;target, or the whole project. Next, you pick rules with &#8211;rule-selector, such as Recommended or Security. Then each engine, such as PMD, ESLint or Flow Scanner, checks the files against its rules. After that, Code Analyzer collects every violation with a severity from 1 (Critical) to 5 (Info). Finally, it shows a table in the terminal or writes a report file, such as HTML, JSON or SARIF.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"640\" src=\"https:\/\/swapnilzambare.com\/blog\/wp-content\/uploads\/2026\/11\/salesforce-code-analyzer-pmd-diagram-1-1024x640.png\" alt=\"Salesforce Code Analyzer diagram showing target, rules, engines, violations, severity and report\" class=\"wp-image-1602\" srcset=\"https:\/\/swapnilzambare.com\/blog\/wp-content\/uploads\/2026\/11\/salesforce-code-analyzer-pmd-diagram-1-1024x640.png 1024w, https:\/\/swapnilzambare.com\/blog\/wp-content\/uploads\/2026\/11\/salesforce-code-analyzer-pmd-diagram-1-300x188.png 300w, https:\/\/swapnilzambare.com\/blog\/wp-content\/uploads\/2026\/11\/salesforce-code-analyzer-pmd-diagram-1-768x480.png 768w, https:\/\/swapnilzambare.com\/blog\/wp-content\/uploads\/2026\/11\/salesforce-code-analyzer-pmd-diagram-1-1536x960.png 1536w, https:\/\/swapnilzambare.com\/blog\/wp-content\/uploads\/2026\/11\/salesforce-code-analyzer-pmd-diagram-1-2048x1280.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">How a Code Analyzer scan produces its report.<\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Engines<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">PMD checks Apex and Visualforce. ESLint checks JavaScript and LWC. Retire.js finds old libraries with known problems. Flow Scanner checks flows, Regex runs pattern rules, and CPD finds copied code.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Rule Selectors<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The &#8211;rule-selector flag picks rules by engine, tag or severity. For example, <code>pmd:Security<\/code> selects PMD security rules, and <code>Recommended<\/code> selects the default set.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Severities<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Severities run from 1 (Critical) to 5 (Info). Fix 1 and 2 first, and decide team rules for the rest.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Configuration File<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">A code-analyzer.yml file in the project changes rule severities, turns engines off, or adds tags. Run <code>sf code-analyzer config<\/code> to generate a starting file.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Suppressions<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">When a violation is a false alarm, you can suppress it in code, for example with @SuppressWarnings(&#8216;PMD.ApexCRUDViolation&#8217;). Always add a comment that explains why.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Common PMD Rules for Apex<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The table below lists rules you will see often in Apex projects.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Rule<\/th><th>What it flags<\/th><\/tr><\/thead><tbody><tr><td>ApexCRUDViolation<\/td><td>SOQL or DML without CRUD and FLS checks or user mode<\/td><\/tr><tr><td>ApexSharingViolations<\/td><td>Classes with SOQL or DML but no sharing keyword<\/td><\/tr><tr><td>ApexSOQLInjection<\/td><td>Dynamic SOQL built from untrusted input<\/td><\/tr><tr><td>ApexXSSFromURLParam<\/td><td>URL parameters used without escaping<\/td><\/tr><tr><td>OperationWithLimitsInLoop<\/td><td>SOQL, DML or similar calls inside loops<\/td><\/tr><tr><td>ApexUnitTestClassShouldHaveAsserts<\/td><td>Test methods with no asserts<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Code Analyzer vs Manual Code Review<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The table below compares the scanner with a human reviewer.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Feature<\/th><th>Salesforce Code Analyzer<\/th><th>Manual code review<\/th><\/tr><\/thead><tbody><tr><td>Speed<\/td><td>Seconds for a project<\/td><td>Hours for a big change<\/td><\/tr><tr><td>Consistency<\/td><td>Same rules every time<\/td><td>Depends on the reviewer<\/td><\/tr><tr><td>Business logic bugs<\/td><td>Rarely found<\/td><td>Often found<\/td><\/tr><tr><td>False alarms<\/td><td>Some<\/td><td>Few<\/td><\/tr><tr><td>Best at<\/td><td>Known patterns and rules<\/td><td>Design and intent<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">When to use which is easy. Use both. Let Code Analyzer catch known patterns first, so reviewers can focus on design and business rules.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"640\" src=\"https:\/\/swapnilzambare.com\/blog\/wp-content\/uploads\/2026\/11\/salesforce-code-analyzer-pmd-diagram-2-1024x640.png\" alt=\"Salesforce Code Analyzer diagram comparing Code Analyzer with manual code review\" class=\"wp-image-1603\" srcset=\"https:\/\/swapnilzambare.com\/blog\/wp-content\/uploads\/2026\/11\/salesforce-code-analyzer-pmd-diagram-2-1024x640.png 1024w, https:\/\/swapnilzambare.com\/blog\/wp-content\/uploads\/2026\/11\/salesforce-code-analyzer-pmd-diagram-2-300x188.png 300w, https:\/\/swapnilzambare.com\/blog\/wp-content\/uploads\/2026\/11\/salesforce-code-analyzer-pmd-diagram-2-768x480.png 768w, https:\/\/swapnilzambare.com\/blog\/wp-content\/uploads\/2026\/11\/salesforce-code-analyzer-pmd-diagram-2-1536x960.png 1536w, https:\/\/swapnilzambare.com\/blog\/wp-content\/uploads\/2026\/11\/salesforce-code-analyzer-pmd-diagram-2-2048x1280.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Code Analyzer vs manual code review.<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">A Real Salesforce Code Analyzer Example<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Let&#8217;s run Salesforce Code Analyzer on the Bright Path Tutors project in VS Code&#8217;s terminal.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 1: Install the Plugin<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>sf plugins install @salesforce\/plugin-code-analyzer\nsf code-analyzer rules --rule-selector \"pmd:Security\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The first command installs or updates the plugin. The second lists the PMD security rules, so you can see what will run.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 2: Scan a Class<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Here is an old class that the scanner should flag.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public class CourseSearch {\n    public static List&lt;Course__c&gt; find(String text) {\n        return Database.query('SELECT Id FROM Course__c WHERE Name = \\'' + text + '\\'');\n    }\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The class has no sharing keyword and builds a query from raw text. Now run the scan.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sf code-analyzer run --target force-app\/main\/default\/classes\/CourseSearch.cls --rule-selector Security --view detail<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Step 3: Read the Results<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Here is a shortened version of the output.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>=== 1. ApexSOQLInjection\n    severity: 2 (High)\n    engine:   pmd\n    location: force-app\/main\/default\/classes\/CourseSearch.cls (3:16)\n=== 2. ApexSharingViolations\n    severity: 3 (Moderate)\n    engine:   pmd\n    location: force-app\/main\/default\/classes\/CourseSearch.cls (1:1)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Both problems from the Level 6 posts show up. So the fix is to add with sharing and use a bind variable with user mode, then scan again until the list is empty.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 4: Add It to CI<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>sf code-analyzer run --rule-selector Recommended --severity-threshold 2 --output-file results.sarif<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The &#8211;severity-threshold flag makes the command fail when it finds violations of severity 2 or worse. So a CI job can block a pull request, and the SARIF file can show results in tools such as GitHub code scanning.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Salesforce Code Analyzer in VS Code<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The Salesforce Code Analyzer extension for VS Code scans files as you work. It underlines violations in the editor and shows them in the Problems panel. So you can fix issues before you even commit.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Common Mistakes with Salesforce Code Analyzer<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Running it only once before release instead of on every change.<\/li>\n\n<li>Suppressing violations without a written reason.<\/li>\n\n<li>Treating every finding as equal instead of fixing high severities first.<\/li>\n\n<li>Using an old version of the plugin with outdated rules.<\/li>\n\n<li>Assuming a clean scan means the code is fully secure.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Best Practices for Salesforce Code Analyzer<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Run it locally in VS Code and again in CI.<\/li>\n\n<li>Fail builds on severity 1 and 2 findings.<\/li>\n\n<li>Keep a shared code-analyzer.yml in the repository.<\/li>\n\n<li>Review suppressions during code review.<\/li>\n\n<li>Update the plugin regularly to get new rules.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Practice Task<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Run <code>sf code-analyzer run --rule-selector Recommended --output-file results.html<\/code> on your project and open the HTML report. Then fix the three highest-severity findings. Hint: sort by severity and start with Security tags.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Most Asked Interview Questions on Salesforce Code Analyzer<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Teams expect developers to know their quality tools. Here are the 21 questions asked most about Salesforce Code Analyzer.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Basic Questions on Salesforce Code Analyzer<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Q1: What is Salesforce Code Analyzer?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A CLI plugin and VS Code extension that scans Salesforce code with engines such as PMD and ESLint.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Q2: What is static analysis?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Checking code for problems by reading it, without running it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Q3: Which engine checks Apex?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">PMD, along with others such as Regex and CPD.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Q4: How do you install the plugin?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Run sf plugins install @salesforce\/plugin-code-analyzer.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Q5: Which command runs a scan?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">sf code-analyzer run.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Q6: What do severities mean?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">They rank findings from 1 (Critical) to 5 (Info).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Q7: Which rule flags missing sharing keywords?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">ApexSharingViolations.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Code and Scenario Questions on Salesforce Code Analyzer<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Q8: How do you scan only security rules?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Use &#8211;rule-selector Security, or an engine-specific selector such as pmd:Security.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Q9: How do you scan a single file or folder?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Use the &#8211;target flag with the path.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Q10: How do you save results to a file?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Use &#8211;output-file with an extension such as .html, .json, .csv or .sarif.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Q11: How do you make CI fail on serious findings?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Use &#8211;severity-threshold, for example 2, so the command exits with an error.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Q12: Which rule flags queries in loops?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">OperationWithLimitsInLoop.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Q13: How do you suppress a false alarm?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Use @SuppressWarnings with the PMD rule name, and add a comment explaining why.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Q14: How do you change a rule&#8217;s severity for your team?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Set it in code-analyzer.yml.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Advanced Questions on Salesforce Code Analyzer<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Q15: Why is a clean scan not proof of security?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Scanners find known patterns but miss business logic and design flaws.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Q16: What is the Flow Scanner engine for?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It checks flows for issues such as unsafe data paths and bad practices.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Q17: What is SARIF?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A standard format for static analysis results that many CI and code hosting tools understand.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Q18: Why is Code Analyzer important for AppExchange partners?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Partners scan code as part of preparing for security review.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Q19: How do you roll out Code Analyzer on a large old project?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Start with high severities, fix or document them, then tighten the threshold over time.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Q20: What does CPD find?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Copy-pasted code blocks, which are harder to maintain.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Q21: Where should the scanner run in a team workflow?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In VS Code while coding, and in CI on every pull request.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Official Resources<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/developer.salesforce.com\/docs\/platform\/salesforce-code-analyzer\/guide\/analyze.html\" target=\"_blank\" rel=\"noopener noreferrer\">Use CLI Commands to Analyze Your Code (Salesforce Code Analyzer)<\/a><\/li>\n\n<li><a href=\"https:\/\/developer.salesforce.com\/docs\/platform\/salesforce-code-analyzer\/guide\/release-notes.html\" target=\"_blank\" rel=\"noopener noreferrer\">Salesforce Code Analyzer Release Notes<\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Quick Recap<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Salesforce Code Analyzer scans code with PMD, ESLint and other engines.<\/li>\n\n<li>Use sf code-analyzer run with &#8211;target and &#8211;rule-selector.<\/li>\n\n<li>Severities run from 1 (Critical) to 5 (Info).<\/li>\n\n<li>Use &#8211;severity-threshold to fail CI on serious findings.<\/li>\n\n<li>A clean scan helps, but it does not replace code review.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">What&#8217;s Next?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">You have finished Level 6: Security in Code. Next, start Level 7 with our guide to <a href=\"https:\/\/swapnilzambare.com\/blog\/asynchronous-apex-overview\/\">Asynchronous Apex<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Salesforce Code Analyzer is a free scanner that reads your Apex, Lightning, Visualforce and Flow code and reports security and quality problems before they&hellip;<\/p>\n","protected":false},"author":1,"featured_media":1601,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_swapz_level":"","_swapz_series_part":0,"_swapz_hide_toc":false,"_swapz_hide_featured":false,"_swapz_description":"","footnotes":""},"categories":[8,96],"tags":[98,26,91,7,100,97,17],"swapz_series":[],"class_list":["post-1604","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-salesforce","category-salesforce-developer","tag-apex","tag-intermediate","tag-interview-questions","tag-salesforce","tag-salesforce-cli","tag-salesforce-developer","tag-security"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Salesforce Code Analyzer and PMD for Apex<\/title>\n<meta name=\"description\" content=\"Salesforce Code Analyzer explained simply: install, run, rule selectors, PMD Apex rules, severities, config files, CI checks and 21 interview Q&amp;A.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/swapnilzambare.com\/blog\/salesforce-code-analyzer-pmd\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Salesforce Code Analyzer and PMD for Apex\" \/>\n<meta property=\"og:description\" content=\"Salesforce Code Analyzer explained simply: install, run, rule selectors, PMD Apex rules, severities, config files, CI checks and 21 interview Q&amp;A.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/swapnilzambare.com\/blog\/salesforce-code-analyzer-pmd\/\" \/>\n<meta property=\"og:site_name\" content=\"Swapnil Zambare - Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-09-09T11:30:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/swapnilzambare.com\/blog\/wp-content\/uploads\/2026\/11\/salesforce-code-analyzer-pmd-featured.png\" \/>\n\t<meta property=\"og:image:width\" content=\"2400\" \/>\n\t<meta property=\"og:image:height\" content=\"1260\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Swapnil Zambare\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Swapnil Zambare\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/swapnilzambare.com\\\/blog\\\/salesforce-code-analyzer-pmd\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/swapnilzambare.com\\\/blog\\\/salesforce-code-analyzer-pmd\\\/\"},\"author\":{\"name\":\"Swapnil Zambare\",\"@id\":\"https:\\\/\\\/swapnilzambare.com\\\/blog\\\/#\\\/schema\\\/person\\\/922ac0131aaa7088c78c2cb1700e0c9a\"},\"headline\":\"Salesforce Code Analyzer and PMD: Scan Apex for Security Issues\",\"datePublished\":\"2026-09-09T11:30:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/swapnilzambare.com\\\/blog\\\/salesforce-code-analyzer-pmd\\\/\"},\"wordCount\":1495,\"publisher\":{\"@id\":\"https:\\\/\\\/swapnilzambare.com\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/swapnilzambare.com\\\/blog\\\/salesforce-code-analyzer-pmd\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/swapnilzambare.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/salesforce-code-analyzer-pmd-featured.png\",\"keywords\":[\"Apex\",\"Intermediate\",\"Interview Questions\",\"Salesforce\",\"Salesforce CLI\",\"Salesforce Developer\",\"Security\"],\"articleSection\":[\"Salesforce\",\"Salesforce Developer\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/swapnilzambare.com\\\/blog\\\/salesforce-code-analyzer-pmd\\\/\",\"url\":\"https:\\\/\\\/swapnilzambare.com\\\/blog\\\/salesforce-code-analyzer-pmd\\\/\",\"name\":\"Salesforce Code Analyzer and PMD for Apex\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/swapnilzambare.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/swapnilzambare.com\\\/blog\\\/salesforce-code-analyzer-pmd\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/swapnilzambare.com\\\/blog\\\/salesforce-code-analyzer-pmd\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/swapnilzambare.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/salesforce-code-analyzer-pmd-featured.png\",\"datePublished\":\"2026-09-09T11:30:00+00:00\",\"description\":\"Salesforce Code Analyzer explained simply: install, run, rule selectors, PMD Apex rules, severities, config files, CI checks and 21 interview Q&A.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/swapnilzambare.com\\\/blog\\\/salesforce-code-analyzer-pmd\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/swapnilzambare.com\\\/blog\\\/salesforce-code-analyzer-pmd\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/swapnilzambare.com\\\/blog\\\/salesforce-code-analyzer-pmd\\\/#primaryimage\",\"url\":\"https:\\\/\\\/swapnilzambare.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/salesforce-code-analyzer-pmd-featured.png\",\"contentUrl\":\"https:\\\/\\\/swapnilzambare.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/salesforce-code-analyzer-pmd-featured.png\",\"width\":2400,\"height\":1260,\"caption\":\"Salesforce Code Analyzer featured image: title card with an Apex code example\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/swapnilzambare.com\\\/blog\\\/salesforce-code-analyzer-pmd\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/swapnilzambare.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Salesforce Code Analyzer and PMD: Scan Apex for Security Issues\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/swapnilzambare.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/swapnilzambare.com\\\/blog\\\/\",\"name\":\"Swapnil Zambare - Blog\",\"description\":\"Salesforce &amp; Tech Guides\",\"publisher\":{\"@id\":\"https:\\\/\\\/swapnilzambare.com\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/swapnilzambare.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/swapnilzambare.com\\\/blog\\\/#organization\",\"name\":\"Swapnil Zambare - Blog\",\"url\":\"https:\\\/\\\/swapnilzambare.com\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/swapnilzambare.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/swapnilzambare.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/site-icon-512.png\",\"contentUrl\":\"https:\\\/\\\/swapnilzambare.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/site-icon-512.png\",\"width\":512,\"height\":512,\"caption\":\"Swapnil Zambare - Blog\"},\"image\":{\"@id\":\"https:\\\/\\\/swapnilzambare.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.linkedin.com\\\/in\\\/theSwapnilZambare\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/swapnilzambare.com\\\/blog\\\/#\\\/schema\\\/person\\\/922ac0131aaa7088c78c2cb1700e0c9a\",\"name\":\"Swapnil Zambare\",\"sameAs\":[\"https:\\\/\\\/swapnilzambare.com\\\/blog\"],\"url\":\"https:\\\/\\\/swapnilzambare.com\\\/blog\\\/author\\\/swapnil-zambare\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Salesforce Code Analyzer and PMD for Apex","description":"Salesforce Code Analyzer explained simply: install, run, rule selectors, PMD Apex rules, severities, config files, CI checks and 21 interview Q&A.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/swapnilzambare.com\/blog\/salesforce-code-analyzer-pmd\/","og_locale":"en_US","og_type":"article","og_title":"Salesforce Code Analyzer and PMD for Apex","og_description":"Salesforce Code Analyzer explained simply: install, run, rule selectors, PMD Apex rules, severities, config files, CI checks and 21 interview Q&A.","og_url":"https:\/\/swapnilzambare.com\/blog\/salesforce-code-analyzer-pmd\/","og_site_name":"Swapnil Zambare - Blog","article_published_time":"2026-09-09T11:30:00+00:00","og_image":[{"width":2400,"height":1260,"url":"https:\/\/swapnilzambare.com\/blog\/wp-content\/uploads\/2026\/11\/salesforce-code-analyzer-pmd-featured.png","type":"image\/png"}],"author":"Swapnil Zambare","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Swapnil Zambare","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/swapnilzambare.com\/blog\/salesforce-code-analyzer-pmd\/#article","isPartOf":{"@id":"https:\/\/swapnilzambare.com\/blog\/salesforce-code-analyzer-pmd\/"},"author":{"name":"Swapnil Zambare","@id":"https:\/\/swapnilzambare.com\/blog\/#\/schema\/person\/922ac0131aaa7088c78c2cb1700e0c9a"},"headline":"Salesforce Code Analyzer and PMD: Scan Apex for Security Issues","datePublished":"2026-09-09T11:30:00+00:00","mainEntityOfPage":{"@id":"https:\/\/swapnilzambare.com\/blog\/salesforce-code-analyzer-pmd\/"},"wordCount":1495,"publisher":{"@id":"https:\/\/swapnilzambare.com\/blog\/#organization"},"image":{"@id":"https:\/\/swapnilzambare.com\/blog\/salesforce-code-analyzer-pmd\/#primaryimage"},"thumbnailUrl":"https:\/\/swapnilzambare.com\/blog\/wp-content\/uploads\/2026\/11\/salesforce-code-analyzer-pmd-featured.png","keywords":["Apex","Intermediate","Interview Questions","Salesforce","Salesforce CLI","Salesforce Developer","Security"],"articleSection":["Salesforce","Salesforce Developer"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/swapnilzambare.com\/blog\/salesforce-code-analyzer-pmd\/","url":"https:\/\/swapnilzambare.com\/blog\/salesforce-code-analyzer-pmd\/","name":"Salesforce Code Analyzer and PMD for Apex","isPartOf":{"@id":"https:\/\/swapnilzambare.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/swapnilzambare.com\/blog\/salesforce-code-analyzer-pmd\/#primaryimage"},"image":{"@id":"https:\/\/swapnilzambare.com\/blog\/salesforce-code-analyzer-pmd\/#primaryimage"},"thumbnailUrl":"https:\/\/swapnilzambare.com\/blog\/wp-content\/uploads\/2026\/11\/salesforce-code-analyzer-pmd-featured.png","datePublished":"2026-09-09T11:30:00+00:00","description":"Salesforce Code Analyzer explained simply: install, run, rule selectors, PMD Apex rules, severities, config files, CI checks and 21 interview Q&A.","breadcrumb":{"@id":"https:\/\/swapnilzambare.com\/blog\/salesforce-code-analyzer-pmd\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/swapnilzambare.com\/blog\/salesforce-code-analyzer-pmd\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/swapnilzambare.com\/blog\/salesforce-code-analyzer-pmd\/#primaryimage","url":"https:\/\/swapnilzambare.com\/blog\/wp-content\/uploads\/2026\/11\/salesforce-code-analyzer-pmd-featured.png","contentUrl":"https:\/\/swapnilzambare.com\/blog\/wp-content\/uploads\/2026\/11\/salesforce-code-analyzer-pmd-featured.png","width":2400,"height":1260,"caption":"Salesforce Code Analyzer featured image: title card with an Apex code example"},{"@type":"BreadcrumbList","@id":"https:\/\/swapnilzambare.com\/blog\/salesforce-code-analyzer-pmd\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/swapnilzambare.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Salesforce Code Analyzer and PMD: Scan Apex for Security Issues"}]},{"@type":"WebSite","@id":"https:\/\/swapnilzambare.com\/blog\/#website","url":"https:\/\/swapnilzambare.com\/blog\/","name":"Swapnil Zambare - Blog","description":"Salesforce &amp; Tech Guides","publisher":{"@id":"https:\/\/swapnilzambare.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/swapnilzambare.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/swapnilzambare.com\/blog\/#organization","name":"Swapnil Zambare - Blog","url":"https:\/\/swapnilzambare.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/swapnilzambare.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/swapnilzambare.com\/blog\/wp-content\/uploads\/2026\/09\/site-icon-512.png","contentUrl":"https:\/\/swapnilzambare.com\/blog\/wp-content\/uploads\/2026\/09\/site-icon-512.png","width":512,"height":512,"caption":"Swapnil Zambare - Blog"},"image":{"@id":"https:\/\/swapnilzambare.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.linkedin.com\/in\/theSwapnilZambare"]},{"@type":"Person","@id":"https:\/\/swapnilzambare.com\/blog\/#\/schema\/person\/922ac0131aaa7088c78c2cb1700e0c9a","name":"Swapnil Zambare","sameAs":["https:\/\/swapnilzambare.com\/blog"],"url":"https:\/\/swapnilzambare.com\/blog\/author\/swapnil-zambare\/"}]}},"_links":{"self":[{"href":"https:\/\/swapnilzambare.com\/blog\/wp-json\/wp\/v2\/posts\/1604","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/swapnilzambare.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/swapnilzambare.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/swapnilzambare.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/swapnilzambare.com\/blog\/wp-json\/wp\/v2\/comments?post=1604"}],"version-history":[{"count":0,"href":"https:\/\/swapnilzambare.com\/blog\/wp-json\/wp\/v2\/posts\/1604\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/swapnilzambare.com\/blog\/wp-json\/wp\/v2\/media\/1601"}],"wp:attachment":[{"href":"https:\/\/swapnilzambare.com\/blog\/wp-json\/wp\/v2\/media?parent=1604"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/swapnilzambare.com\/blog\/wp-json\/wp\/v2\/categories?post=1604"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/swapnilzambare.com\/blog\/wp-json\/wp\/v2\/tags?post=1604"},{"taxonomy":"swapz_series","embeddable":true,"href":"https:\/\/swapnilzambare.com\/blog\/wp-json\/wp\/v2\/swapz_series?post=1604"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}