{"id":21277,"date":"2014-02-18T07:00:30","date_gmt":"2014-02-18T05:00:30","guid":{"rendered":"http:\/\/www.javacodegeeks.com\/?p=21277"},"modified":"2014-02-17T20:52:17","modified_gmt":"2014-02-17T18:52:17","slug":"creating-sonarqube-projects","status":"publish","type":"post","link":"https:\/\/www.javacodegeeks.com\/2014\/02\/creating-sonarqube-projects.html","title":{"rendered":"Creating Sonarqube Projects"},"content":{"rendered":"<p><a href=\"http:\/\/www.sonarqube.org\/\">Sonarqube<\/a> (nee Sonar) is da bomb. It\u2019s not something you have to check daily but if you\u2019re serious about quality you\u2019ll check it during sprint planning if not weekly.<\/p>\n<p>Check out a sample project at <a href=\"nemo.sonarqube.com\">nemo.sonarqube.com<\/a>, e.g., <a href=\"http:\/\/nemo.sonarqube.org\/dashboard\/index\/129572\">OpenJPA<\/a>, to get an idea of what information is available. You might want to focus on a specific component at first, e.g., <a>OpenJPA JDBC<\/a>.<\/p>\n<p>As a developer I\u2019m mostly interested in the \u201cissues\u201d (mostly <a href=\"findbugs.sourceforge.net\/\u200e\">FindBugs<\/a> and Squid) and \u201cunit test coverage.\u201d As an architect I\u2019m mostly interested in the \u201cpackage tangle index\u201d and \u201ccomplexity\u201d \u2013 the former is a measure of proper encapsulation and decoupling and the latter is a measure of maintainability.<\/p>\n<p>It\u2019s important to view these numbers with an appropriate amount of salt. They give valuable insights but it takes a bit of experience to make the best use of them. That\u2019s why it\u2019s important to keep this information away from the bean counters who will set unreasonable standards like 90% code coverage in all unit tests. (This can be impossible to achieve if you have rich exception handling but no way to mock the classes that will throw those exceptions. Only a fool would trade code robustness for a higher score.)<\/p>\n<h2>Installing Sonarqube<\/h2>\n<p>It\u2019s straightforward to install sonarqube. It comes bundled with its own webapp server and embedded database so you can check it out by just unpacking it and running the startup script. A production system should use a real database. Multiple databases are supported.<\/p>\n<p>Check the <a href=\"http:\/\/www.sonarqube.org\/\">sonarqube<\/a> site for details.<\/p>\n<h2>Creating Our Project<\/h2>\n<p>I\u2019ll admit it \u2013 creating a project is very counter-intuitive. In a nutshell everything is handled by pushing data to the server without creating anything on the sonarqube server first. (You\u2019ll still want to create admin users on the sonarqube server.)<\/p>\n<p>In practice this means that we add a maven plugin. This is an expensive plugin so it\u2019s common to use a custom profile, e.g., \u201csonar\u201d (for the legacy name).<\/p>\n<pre class=\" brush:xml\">&lt;project xmlns=\"http:\/\/maven.apache.org\/POM\/4.0.0\" xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"\r\n\txsi:schemaLocation=\"http:\/\/maven.apache.org\/POM\/4.0.0 http:\/\/maven.apache.org\/xsd\/maven-4.0.0.xsd\"&gt;\r\n\r\n    &lt;profiles&gt;\r\n        &lt;profile&gt;\r\n            &lt;id&gt;sonar&lt;\/id&gt;\r\n            &lt;properties&gt;\r\n                &lt;sonar.language&gt;java&lt;\/sonar.language&gt;\r\n                &lt;sonar.host.url&gt;http:\/\/chaos:9000&lt;\/sonar.host.url&gt;\r\n                &lt;sonar.jdbc.url&gt;jdbc:postgresql:\/\/chaos\/sonar&lt;\/sonar.jdbc.url&gt;\r\n                &lt;sonar.jdbc.username&gt;sonar&lt;\/sonar.jdbc.username&gt;\r\n                &lt;sonar.jdbc.password&gt;sonar&lt;\/sonar.jdbc.password&gt;\r\n            &lt;\/properties&gt;\r\n            &lt;build&gt;\r\n                &lt;plugins&gt;\r\n                    &lt;plugin&gt;\r\n                        &lt;groupId&gt;org.jacoco&lt;\/groupId&gt;\r\n                        &lt;artifactId&gt;jacoco-maven-plugin&lt;\/artifactId&gt;\r\n                        &lt;version&gt;0.6.4.201312101107&lt;\/version&gt;\r\n                        &lt;executions&gt;\r\n                            &lt;execution&gt;\r\n                                &lt;id&gt;default-prepare-agent&lt;\/id&gt;\r\n                                &lt;goals&gt;\r\n                                    &lt;goal&gt;prepare-agent&lt;\/goal&gt;\r\n                                &lt;\/goals&gt;\r\n                            &lt;\/execution&gt;\r\n                            &lt;execution&gt;\r\n                                &lt;id&gt;default-prepare-agent-integration&lt;\/id&gt;\r\n                                &lt;goals&gt;\r\n                                    &lt;goal&gt;prepare-agent-integration&lt;\/goal&gt;\r\n                                &lt;\/goals&gt;\r\n                            &lt;\/execution&gt;\r\n                            &lt;execution&gt;\r\n                                &lt;id&gt;default-report&lt;\/id&gt;\r\n                                &lt;goals&gt;\r\n                                    &lt;goal&gt;report&lt;\/goal&gt;\r\n                                &lt;\/goals&gt;\r\n                            &lt;\/execution&gt;\r\n                            &lt;execution&gt;\r\n                                &lt;id&gt;default-report-integration&lt;\/id&gt;\r\n                                &lt;goals&gt;\r\n                                    &lt;goal&gt;report-integration&lt;\/goal&gt;\r\n                                &lt;\/goals&gt;\r\n                            &lt;\/execution&gt;\r\n                            &lt;execution&gt;\r\n                                &lt;id&gt;default-check&lt;\/id&gt;\r\n                                &lt;goals&gt;\r\n                                    &lt;goal&gt;check&lt;\/goal&gt;\r\n                                &lt;\/goals&gt;\r\n                                &lt;configuration&gt;\r\n                                    &lt;rules&gt;\r\n                                        &lt;!-- implmentation is needed only for Maven 2 --&gt;\r\n                                        &lt;rule implementation=\"org.jacoco.maven.RuleConfiguration\"&gt;\r\n                                            &lt;element&gt;BUNDLE&lt;\/element&gt;\r\n                                            &lt;limits&gt;\r\n                                                &lt;!-- implmentation is needed only for Maven 2 --&gt;\r\n                                                &lt;limit implementation=\"org.jacoco.report.check.Limit\"&gt;\r\n                                                    &lt;counter&gt;COMPLEXITY&lt;\/counter&gt;\r\n                                                    &lt;value&gt;COVEREDRATIO&lt;\/value&gt;\r\n                                                    &lt;minimum&gt;0.60&lt;\/minimum&gt;\r\n                                                &lt;\/limit&gt;\r\n                                            &lt;\/limits&gt;\r\n                                        &lt;\/rule&gt;\r\n                                    &lt;\/rules&gt;\r\n                                &lt;\/configuration&gt;\r\n                            &lt;\/execution&gt;\r\n                        &lt;\/executions&gt;\r\n                    &lt;\/plugin&gt;\r\n                &lt;\/plugins&gt;\r\n            &lt;\/build&gt;\r\n        &lt;\/profile&gt;\r\n    &lt;\/profiles&gt;\r\n&lt;\/project&gt;<\/pre>\n<h2>Updating Our Project<\/h2>\n<p>The sonar plugin is expensive so it should not be run as part of a routine build. A common practice is to schedule a nightly build on the CI server (Hudson, Continuum, etc.) Developers may also want to perform off-schedule builds while working on the issue backlog \u2013 it\u2019s not uncommon for one fix to introduce other lower-priority issues.<div style=\"display:inline-block; margin: 15px 0;\"> <div id=\"adngin-JavaCodeGeeks_incontent_video-0\" style=\"display:inline-block;\"><\/div> <\/div><\/p>\n<h2>Source Code<\/h2>\n<p>A sample project using this plugin is at <a href=\"https:\/\/github.com\/beargiles\/project-student\">https:\/\/github.com\/beargiles\/project-student<\/a> [github] and <a href=\"http:\/\/beargiles.github.io\/project-student\/\">http:\/\/beargiles.github.io\/project-student\/<\/a> [github pages].<\/p>\n<p>This project illustrates the need to be intelligent about how we interpret the results. I use two common practices \u2013 throwing an internal exception instead of returning a null value and using a custom \u2018UnitTestException\u2019 to test failure code without cluttering the logs with extraneous information. The code looks the same as questionable code so it\u2019s properly flagged but there doesn\u2019t seem to be a way to silence squid warnings. (Findbugs has its own SuppressWarnings annotation.)<\/p>\n<p>Overall it\u2019s still a huge win.<\/p>\n<p>(Update: it\u2019s possible to control the squid warnings via the sonarqube \u2018Quality Profiles\u2019 tab. This can be used to reduce the severity level to \u2018info\u2019 but I\u2019m hesitant to disable these tests outright since they are sometimes legitimate warnings. That\u2019s why I strongly prefer to use per-instance FindBugs SuppressWarnings annotations instead of changing those warning levels.)<br \/>\n&nbsp;<\/p>\n<div style=\"border: 1px solid #D8D8D8; background: #FAFAFA; width: 100%; padding-left: 5px;\"><b><i>Reference: <\/i><\/b><a href=\"http:\/\/invariantproperties.com\/2014\/01\/27\/creating-sonarqube-projects\/\">Creating Sonarqube Projects<\/a> from our <a href=\"http:\/\/www.javacodegeeks.com\/jcg\">JCG partner<\/a> Bear Giles at the <a href=\"http:\/\/invariantproperties.com\/\">Invariant Properties<\/a> blog.<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Sonarqube (nee Sonar) is da bomb. It\u2019s not something you have to check daily but if you\u2019re serious about quality you\u2019ll check it during sprint planning if not weekly. Check out a sample project at nemo.sonarqube.com, e.g., OpenJPA, to get an idea of what information is available. You might want to focus on a specific &hellip;<\/p>\n","protected":false},"author":113,"featured_media":236,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[328,920],"class_list":["post-21277","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-enterprise-java","tag-sonar","tag-sonarqube"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Creating Sonarqube Projects<\/title>\n<meta name=\"description\" content=\"Sonarqube (nee Sonar) is da bomb. It\u2019s not something you have to check daily but if you\u2019re serious about quality you\u2019ll check it during sprint planning if\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.javacodegeeks.com\/2014\/02\/creating-sonarqube-projects.html\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Creating Sonarqube Projects\" \/>\n<meta property=\"og:description\" content=\"Sonarqube (nee Sonar) is da bomb. It\u2019s not something you have to check daily but if you\u2019re serious about quality you\u2019ll check it during sprint planning if\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.javacodegeeks.com\/2014\/02\/creating-sonarqube-projects.html\" \/>\n<meta property=\"og:site_name\" content=\"Java Code Geeks\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/javacodegeeks\" \/>\n<meta property=\"article:published_time\" content=\"2014-02-18T05:00:30+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/sonar-logo.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"150\" \/>\n\t<meta property=\"og:image:height\" content=\"150\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Bear Giles\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:site\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Bear Giles\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2014\\\/02\\\/creating-sonarqube-projects.html#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2014\\\/02\\\/creating-sonarqube-projects.html\"},\"author\":{\"name\":\"Bear Giles\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/91196fd6369bac9f4ec7217ffbca53f9\"},\"headline\":\"Creating Sonarqube Projects\",\"datePublished\":\"2014-02-18T05:00:30+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2014\\\/02\\\/creating-sonarqube-projects.html\"},\"wordCount\":587,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2014\\\/02\\\/creating-sonarqube-projects.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/sonar-logo.jpg\",\"keywords\":[\"Sonar\",\"Sonarqube\"],\"articleSection\":[\"Enterprise Java\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2014\\\/02\\\/creating-sonarqube-projects.html#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2014\\\/02\\\/creating-sonarqube-projects.html\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2014\\\/02\\\/creating-sonarqube-projects.html\",\"name\":\"Creating Sonarqube Projects\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2014\\\/02\\\/creating-sonarqube-projects.html#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2014\\\/02\\\/creating-sonarqube-projects.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/sonar-logo.jpg\",\"datePublished\":\"2014-02-18T05:00:30+00:00\",\"description\":\"Sonarqube (nee Sonar) is da bomb. It\u2019s not something you have to check daily but if you\u2019re serious about quality you\u2019ll check it during sprint planning if\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2014\\\/02\\\/creating-sonarqube-projects.html#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2014\\\/02\\\/creating-sonarqube-projects.html\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2014\\\/02\\\/creating-sonarqube-projects.html#primaryimage\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/sonar-logo.jpg\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/sonar-logo.jpg\",\"width\":150,\"height\":150},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2014\\\/02\\\/creating-sonarqube-projects.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Enterprise Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\\\/enterprise-java\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Creating Sonarqube Projects\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"name\":\"Java Code Geeks\",\"description\":\"Java Developers Resource Center\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"alternateName\":\"JCG\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.javacodegeeks.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\",\"name\":\"Exelixis Media P.C.\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"width\":864,\"height\":246,\"caption\":\"Exelixis Media P.C.\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/javacodegeeks\",\"https:\\\/\\\/x.com\\\/javacodegeeks\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/91196fd6369bac9f4ec7217ffbca53f9\",\"name\":\"Bear Giles\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/c4e8f47b520b4147cb7f173f9d78cf8862974fdeeff4baea9d6a632cf7b1b54c?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/c4e8f47b520b4147cb7f173f9d78cf8862974fdeeff4baea9d6a632cf7b1b54c?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/c4e8f47b520b4147cb7f173f9d78cf8862974fdeeff4baea9d6a632cf7b1b54c?s=96&d=mm&r=g\",\"caption\":\"Bear Giles\"},\"sameAs\":[\"http:\\\/\\\/invariantproperties.com\\\/\"],\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/author\\\/Bear-Giles\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Creating Sonarqube Projects","description":"Sonarqube (nee Sonar) is da bomb. It\u2019s not something you have to check daily but if you\u2019re serious about quality you\u2019ll check it during sprint planning if","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:\/\/www.javacodegeeks.com\/2014\/02\/creating-sonarqube-projects.html","og_locale":"en_US","og_type":"article","og_title":"Creating Sonarqube Projects","og_description":"Sonarqube (nee Sonar) is da bomb. It\u2019s not something you have to check daily but if you\u2019re serious about quality you\u2019ll check it during sprint planning if","og_url":"https:\/\/www.javacodegeeks.com\/2014\/02\/creating-sonarqube-projects.html","og_site_name":"Java Code Geeks","article_publisher":"https:\/\/www.facebook.com\/javacodegeeks","article_published_time":"2014-02-18T05:00:30+00:00","og_image":[{"width":150,"height":150,"url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/sonar-logo.jpg","type":"image\/jpeg"}],"author":"Bear Giles","twitter_card":"summary_large_image","twitter_creator":"@javacodegeeks","twitter_site":"@javacodegeeks","twitter_misc":{"Written by":"Bear Giles","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.javacodegeeks.com\/2014\/02\/creating-sonarqube-projects.html#article","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/2014\/02\/creating-sonarqube-projects.html"},"author":{"name":"Bear Giles","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/91196fd6369bac9f4ec7217ffbca53f9"},"headline":"Creating Sonarqube Projects","datePublished":"2014-02-18T05:00:30+00:00","mainEntityOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2014\/02\/creating-sonarqube-projects.html"},"wordCount":587,"commentCount":0,"publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2014\/02\/creating-sonarqube-projects.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/sonar-logo.jpg","keywords":["Sonar","Sonarqube"],"articleSection":["Enterprise Java"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.javacodegeeks.com\/2014\/02\/creating-sonarqube-projects.html#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.javacodegeeks.com\/2014\/02\/creating-sonarqube-projects.html","url":"https:\/\/www.javacodegeeks.com\/2014\/02\/creating-sonarqube-projects.html","name":"Creating Sonarqube Projects","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2014\/02\/creating-sonarqube-projects.html#primaryimage"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2014\/02\/creating-sonarqube-projects.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/sonar-logo.jpg","datePublished":"2014-02-18T05:00:30+00:00","description":"Sonarqube (nee Sonar) is da bomb. It\u2019s not something you have to check daily but if you\u2019re serious about quality you\u2019ll check it during sprint planning if","breadcrumb":{"@id":"https:\/\/www.javacodegeeks.com\/2014\/02\/creating-sonarqube-projects.html#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.javacodegeeks.com\/2014\/02\/creating-sonarqube-projects.html"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/2014\/02\/creating-sonarqube-projects.html#primaryimage","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/sonar-logo.jpg","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/sonar-logo.jpg","width":150,"height":150},{"@type":"BreadcrumbList","@id":"https:\/\/www.javacodegeeks.com\/2014\/02\/creating-sonarqube-projects.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.javacodegeeks.com\/"},{"@type":"ListItem","position":2,"name":"Java","item":"https:\/\/www.javacodegeeks.com\/category\/java"},{"@type":"ListItem","position":3,"name":"Enterprise Java","item":"https:\/\/www.javacodegeeks.com\/category\/java\/enterprise-java"},{"@type":"ListItem","position":4,"name":"Creating Sonarqube Projects"}]},{"@type":"WebSite","@id":"https:\/\/www.javacodegeeks.com\/#website","url":"https:\/\/www.javacodegeeks.com\/","name":"Java Code Geeks","description":"Java Developers Resource Center","publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"alternateName":"JCG","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.javacodegeeks.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.javacodegeeks.com\/#organization","name":"Exelixis Media P.C.","url":"https:\/\/www.javacodegeeks.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","width":864,"height":246,"caption":"Exelixis Media P.C."},"image":{"@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/javacodegeeks","https:\/\/x.com\/javacodegeeks"]},{"@type":"Person","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/91196fd6369bac9f4ec7217ffbca53f9","name":"Bear Giles","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/c4e8f47b520b4147cb7f173f9d78cf8862974fdeeff4baea9d6a632cf7b1b54c?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/c4e8f47b520b4147cb7f173f9d78cf8862974fdeeff4baea9d6a632cf7b1b54c?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/c4e8f47b520b4147cb7f173f9d78cf8862974fdeeff4baea9d6a632cf7b1b54c?s=96&d=mm&r=g","caption":"Bear Giles"},"sameAs":["http:\/\/invariantproperties.com\/"],"url":"https:\/\/www.javacodegeeks.com\/author\/Bear-Giles"}]}},"_links":{"self":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/21277","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/users\/113"}],"replies":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/comments?post=21277"}],"version-history":[{"count":0,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/21277\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media\/236"}],"wp:attachment":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media?parent=21277"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/categories?post=21277"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/tags?post=21277"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}