{"id":326896,"date":"2023-09-05T15:56:00","date_gmt":"2023-09-05T15:56:00","guid":{"rendered":"https:\/\/www.baeldung.com\/?p=165289"},"modified":"2023-09-05T15:56:00","modified_gmt":"2023-09-05T15:56:00","slug":"maven-multi-module-project-coverage-with-jacoco","status":"publish","type":"post","link":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/2023\/09\/05\/maven-multi-module-project-coverage-with-jacoco\/","title":{"rendered":"Maven Multi-Module Project Coverage With Jacoco"},"content":{"rendered":"<p class=\"syndicated-attribution\"><meta name= \\\"keywords \\\" content= \\\"\u96fb\u5b50\u8a08\u7b97\u6a5f, \u6559\u80b2, IT \u96fb\u8166\u73ed,\u96fb\u8166\u88dc\u7fd2\uff0c \u96fb\u8166\u73ed\uff0c \u5bb6\u6559\uff0c \u79c1\u4eba\u8001\u5e2b\uff0c \u8cc7\u8a0a\u6280\u8853\uff0c \u7a0b\u5e8f\u8a2d\u8a08\uff0c \u96fb\u5b50\u8a08\u7b97\u6a5f\uff0c \u904a\u6232\uff0c \u860b\u679c\uff0c \u96fb\u5f71\uff0c \u8a08\u7b97\u6a5f\uff0c\u7de8\u78bc\uff0c Java\uff0c C\/C++\uff0c JavaScript\uff0c PHP\uff0c HTML\uff0c CSS\uff0c MySQL\uff0c mobile\uff0c Android\uff0c \u52d5\u6f2b\uff0c Python\uff0c teacher\uff0c \u88dc\u7fd2\uff0c \u96fb\u8166\u88dc\u7fd2 \u8cc7\u8a0a, \u7535\u5b50\u8ba1\u7b97\u673a, IT ,Game, apple, movie, Computer,student,Java,\u6559\u80b2, ,\u5b66\u751f, \u5b66\u4e60, learn, \u6559\u5b66,  Android, apple,anime, animation, \u4fe1\u606f\u6280\u672f, \u7a0b\u5e8f\u8bbe\u8ba1, \u79fb\u52a8\u7535\u8bdd, \u8cc7\u8a0a\u79d1\u6280,Game, Jeu, Juego,Call Of Duty ,\u4f7f\u547d\u53ec\u559a , \u6e38\u620f, \u7535\u5b50\u6e38\u620f,, \u591a\u4eba\u7535\u5b50\u6e38\u620f, \u7f51\u7edc\u6e38\u620f\uff0conline\uff0conline game, \u624b\u673a\u6e38\u620f, mobile \\\"><\/p>\n<p><img src=\"https:\/\/www.baeldung.com\/wp-content\/uploads\/2021\/09\/Java-8-Featured-1024x536.png\" class=\"webfeedsFeaturedVisual wp-post-image\" alt=\"\" decoding=\"async\" loading=\"lazy\" style=\"float: left; margin-right: 5px;\" srcset=\"https:\/\/www.baeldung.com\/wp-content\/uploads\/2021\/09\/Java-8-Featured-1024x536.png 1024w, https:\/\/www.baeldung.com\/wp-content\/uploads\/2021\/09\/Java-8-Featured-300x157.png 300w, https:\/\/www.baeldung.com\/wp-content\/uploads\/2021\/09\/Java-8-Featured-768x402.png 768w, https:\/\/www.baeldung.com\/wp-content\/uploads\/2021\/09\/Java-8-Featured-100x52.png 100w, https:\/\/www.baeldung.com\/wp-content\/uploads\/2021\/09\/Java-8-Featured.png 1200w\" sizes=\"(max-width: 580px) 100vw, 580px\" \/><\/p>\n<h2 id=\"bd-overview\" data-id=\"overview\">1. Overview<\/h2>\n<div class=\"bd-anchor\" id=\"overview\"><\/div>\n<p>In this tutorial, we&#8217;ll build a Maven <a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/www.baeldung.com\/maven-multi-module\">multi-module project<\/a>. In this project, the services and controllers will be in different modules. Then, we&#8217;ll write some tests and use <a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/www.baeldung.com\/jacoco\">Jacoco<\/a> to calculate the code coverage.<\/p>\n<h2 id=\"bd-service-layer\" data-id=\"service-layer\">2. Service Layer<\/h2>\n<div class=\"bd-anchor\" id=\"service-layer\"><\/div>\n<p>First, let&#8217;s create the service layer of our multi-module application.<\/p>\n<h3 id=\"bd-1-service-class\" data-id=\"1-service-class\">2.1. Service Class<\/h3>\n<div class=\"bd-anchor\" id=\"1-service-class\"><\/div>\n<p><strong>We&#8217;ll create our service and add a couple of methods:<\/strong><\/p>\n<pre><code class=\"language-java\">@Service\r\nclass MyService {\r\n    String unitTestedOnly() {\r\n        return &quot;unit tested only&quot;;\r\n    }\r\n    String coveredByUnitAndIntegrationTests() {\r\n        return &quot;covered by unit and integration tests&quot;;\r\n    }\r\n    String coveredByIntegrationTest() {\r\n        return &quot;covered by integration test&quot;;\r\n    }\r\n    String notTested() {\r\n        return &quot;not tested&quot;;\r\n    }\r\n}<\/code><\/pre>\n<p>As their names indicate:<\/p>\n<ul>\n<li>a <a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/www.baeldung.com\/java-unit-testing-best-practices\">unit test<\/a> located in the same layer will test the method <em>unitTestedOnly()<\/em><\/li>\n<li>a unit test will test <em>coveredByUnitAndIntegrationTests()<\/em>. An <a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/www.baeldung.com\/integration-testing-in-spring\">integration test<\/a> in the controller module will also cover this method&#8217;s code<\/li>\n<li>an integration test will cover <em>coveredByIntegrationTest()<\/em>. However, no unit test will test this method<\/li>\n<li>No test will cover the method <em>notTested()<\/em><\/li>\n<\/ul>\n<h3 id=\"bd-2-unit-tests\" data-id=\"2-unit-tests\">2.2. Unit Tests<\/h3>\n<div class=\"bd-anchor\" id=\"2-unit-tests\"><\/div>\n<p><strong>Let&#8217;s now write the corresponding unit tests:<\/strong><\/p>\n<pre><code class=\"language-java\">class MyServiceUnitTest {\r\n    MyService myService = new MyService();\r\n    \r\n    @Test\r\n    void whenUnitTestedOnly_thenCorrectText() {\r\n        assertEquals(&quot;unit tested only&quot;, myService.unitTestedOnly());\r\n    }\r\n    @Test\r\n    void whenTestedMethod_thenCorrectText() {\r\n        assertEquals(&quot;covered by unit and integration tests&quot;, myService.coveredByUnitAndIntegrationTests());\r\n    }\r\n}<\/code><\/pre>\n<p>The tests are simply checking that the method&#8217;s output is as expected.<\/p>\n<h3 id=\"bd-3-surefire-plugin-configuration\" data-id=\"3-surefire-plugin-configuration\">2.3. Surefire Plugin Configuration<\/h3>\n<div class=\"bd-anchor\" id=\"3-surefire-plugin-configuration\"><\/div>\n<p><strong>We&#8217;ll use the Maven <a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/www.baeldung.com\/maven-surefire-plugin\">Surefire plugin<\/a> to run the unit tests.<\/strong> Let&#8217;s configure it inside the service&#8217;s module <em>pom.xml<\/em>:<\/p>\n<pre><code class=\"language-xml\">&lt;plugins&gt;\r\n    &lt;plugin&gt;\r\n    &lt;groupId&gt;org.apache.maven.plugins&lt;\/groupId&gt;\r\n    &lt;artifactId&gt;maven-surefire-plugin&lt;\/artifactId&gt;\r\n    &lt;version&gt;3.1.2&lt;\/version&gt;\r\n    &lt;configuration&gt;\r\n    &lt;includes&gt;\r\n        &lt;include&gt;**\/*Test.java&lt;\/include&gt;\r\n    &lt;\/includes&gt;\r\n    &lt;\/configuration&gt;\r\n    &lt;\/plugin&gt;\r\n&lt;\/plugins&gt;<\/code><\/pre>\n<h2 id=\"bd-controller-layer\" data-id=\"controller-layer\">3. Controller Layer<\/h2>\n<div class=\"bd-anchor\" id=\"controller-layer\"><\/div>\n<p>We&#8217;ll now add a controller layer in our multi-module application.<\/p>\n<h3 id=\"bd-1-controller-class\" data-id=\"1-controller-class\">3.1. Controller Class<\/h3>\n<div class=\"bd-anchor\" id=\"1-controller-class\"><\/div>\n<p>Let&#8217;s add the controller class:<\/p>\n<pre><code class=\"language-java\">@RestController\r\nclass MyController {\r\n    private final MyService myService;\r\n    public MyController(MyService myService) {\r\n        this.myService = myService;\r\n    }\r\n    @GetMapping(&quot;\/tested&quot;)\r\n    String fullyTested() {\r\n        return myService.coveredByUnitAndIntegrationTests();\r\n    }\r\n    @GetMapping(&quot;\/indirecttest&quot;)\r\n    String indirectlyTestingServiceMethod() {\r\n        return myService.coveredByIntegrationTest();\r\n    }\r\n    @GetMapping(&quot;\/nottested&quot;)\r\n    String notTested() {\r\n        return myService.notTested();\r\n    }\r\n}<\/code><\/pre>\n<p>The <em>fullyTested()<\/em> and <em>indirectlyTestingServiceMethod()<\/em> methods will be tested by integration tests. As a result, <strong>those tests will cover the two service methods <em>coveredByUnitAndIntegrationTests()<\/em> and <em>coveredByIntegrationTest()<\/em><\/strong>. On the other hand, we&#8217;ll write no test for <em>notTested()<\/em>.<\/p>\n<h3 id=\"bd-2-integration-tests\" data-id=\"2-integration-tests\">3.2. Integration Tests<\/h3>\n<div class=\"bd-anchor\" id=\"2-integration-tests\"><\/div>\n<p><strong>We can now test our <a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/www.baeldung.com\/spring-controller-vs-restcontroller#spring-mvc-rest-controller\"><em>RestController<\/em><\/a>:<\/strong><\/p>\n<pre><code class=\"language-java\">@SpringBootTest(classes = MyApplication.class)\r\n@AutoConfigureMockMvc\r\nclass MyControllerIntegrationTest {\r\n    @Autowired\r\n    private MockMvc mockMvc;\r\n    @Test\r\n    void whenFullyTested_ThenCorrectText() throws Exception {\r\n        mockMvc.perform(MockMvcRequestBuilders.get(&quot;\/tested&quot;))\r\n          .andExpect(MockMvcResultMatchers.status()\r\n            .isOk())\r\n          .andExpect(MockMvcResultMatchers.content()\r\n            .string(&quot;covered by unit and integration tests&quot;));\r\n    }\r\n    @Test\r\n    void whenIndirectlyTestingServiceMethod_ThenCorrectText() throws Exception {\r\n        mockMvc.perform(MockMvcRequestBuilders.get(&quot;\/indirecttest&quot;))\r\n          .andExpect(MockMvcResultMatchers.status()\r\n            .isOk())\r\n          .andExpect(MockMvcResultMatchers.content()\r\n            .string(&quot;covered by integration test&quot;));\r\n    }\r\n}<\/code><\/pre>\n<p>In these tests, we start an application server and send it requests. Then, we check that the output is correct.<\/p>\n<h3 id=\"bd-3-failsafe-plugin-configuration\" data-id=\"3-failsafe-plugin-configuration\">3.3. Failsafe Plugin Configuration<\/h3>\n<div class=\"bd-anchor\" id=\"3-failsafe-plugin-configuration\"><\/div>\n<p><strong>We&#8217;ll use the Maven <a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/www.baeldung.com\/maven-failsafe-plugin\">Failsafe plugin<\/a> to run the integration tests.<\/strong> The last step is to configure it inside the controller&#8217;s module <em>pom.xml<\/em>:<\/p>\n<pre><code class=\"language-xml\">&lt;plugin&gt;\r\n    &lt;groupId&gt;org.apache.maven.plugins&lt;\/groupId&gt;\r\n    &lt;artifactId&gt;maven-failsafe-plugin&lt;\/artifactId&gt;\r\n    &lt;version&gt;3.1.2&lt;\/version&gt;\r\n    &lt;executions&gt;\r\n        &lt;execution&gt;\r\n            &lt;goals&gt;\r\n                &lt;goal&gt;integration-test&lt;\/goal&gt;\r\n                &lt;goal&gt;verify&lt;\/goal&gt;\r\n            &lt;\/goals&gt;\r\n\t&lt;\/execution&gt;\r\n        &lt;\/executions&gt;\r\n    &lt;configuration&gt;\r\n        &lt;includes&gt;\r\n            &lt;include&gt;**\/*IntegrationTest.java&lt;\/include&gt;\r\n        &lt;\/includes&gt;\r\n    &lt;\/configuration&gt;\r\n&lt;\/plugin&gt;<\/code><\/pre>\n<h2 id=\"bd-aggregating-coverage-via-jacoco\" data-id=\"aggregating-coverage-via-jacoco\">4. Aggregating Coverage via Jacoco<\/h2>\n<div class=\"bd-anchor\" id=\"aggregating-coverage-via-jacoco\"><\/div>\n<p>Jacoco (Java Code Coverage) is a tool used in Java applications to measure code coverage during testing. Let&#8217;s now compute our coverage report.<\/p>\n<h3 id=\"bd-1-preparing-jacoco-agent\" data-id=\"1-preparing-jacoco-agent\">4.1. Preparing Jacoco Agent<\/h3>\n<div class=\"bd-anchor\" id=\"1-preparing-jacoco-agent\"><\/div>\n<p><strong>The <em>prepare-agent<\/em> phase <span data-preserver-spaces=\"true\">sets up the necessary hooks and configuration so that Jacoco can track the executed code while running tests<\/span>.<\/strong> This configuration is required before we run any tests. Thus, we&#8217;ll add the preparation step directly to the parent <em>pom.xml<\/em>:<\/p>\n<pre><code class=\"language-java\">&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.8.8&lt;\/version&gt;\r\n    &lt;executions&gt;\r\n        &lt;execution&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;\/executions&gt;\r\n&lt;\/plugin&gt;<\/code><\/pre>\n<h3 id=\"bd-2-gathering-tests-results\" data-id=\"2-gathering-tests-results\">4.2. Gathering Tests Results<\/h3>\n<div class=\"bd-anchor\" id=\"2-gathering-tests-results\"><\/div>\n<p>To gather the test coverage, we&#8217;ll create a new module <em>aggregate-report<\/em>. It contains only a <em>pom.xml<\/em> and has dependencies on the two previous modules.<\/p>\n<p>Thanks to the preparation phase, we can aggregate the reports from every module. <strong>It&#8217;s the job of the <em>report-aggregate<\/em> <a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/www.baeldung.com\/maven-goals-phases#maven-goal\">goal<\/a>:<\/strong><\/p>\n<pre><code class=\"language-xml\">&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.8.8&lt;\/version&gt;\r\n    &lt;executions&gt;\r\n        &lt;execution&gt;\r\n            &lt;phase&gt;verify&lt;\/phase&gt;\r\n            &lt;goals&gt;\r\n                &lt;goal&gt;report-aggregate&lt;\/goal&gt;\r\n            &lt;\/goals&gt;\r\n            &lt;configuration&gt;\r\n                &lt;dataFileIncludes&gt;\r\n                    &lt;dataFileInclude&gt;**\/jacoco.exec&lt;\/dataFileInclude&gt;\r\n                &lt;\/dataFileIncludes&gt;\r\n                &lt;outputDirectory&gt;${project.reporting.outputDirectory}\/jacoco-aggregate&lt;\/outputDirectory&gt;\r\n            &lt;\/configuration&gt;\r\n        &lt;\/execution&gt;\r\n    &lt;\/executions&gt;\r\n&lt;\/plugin&gt;<\/code><\/pre>\n<p>We can now run the <em>verify<\/em> goal from the parent module:<\/p>\n<pre><code class=\"language-plaintext\">$ mvn clean verify<\/code><\/pre>\n<p>At the end of the build, we can see that Jacoco generates the report in the <em>target\/site\/jacoco-aggregate<\/em> folder of the <em>aggregate-report<\/em> submodule.<\/p>\n<p>Let&#8217;s open the <em>index.html<\/em> file to have a look at the results.<\/p>\n<p>To begin, we can navigate to the report for the controller class:<\/p>\n<p><a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/www.baeldung.com\/wp-content\/uploads\/2023\/09\/controller_coverage.png\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-165290\" src=\"https:\/\/www.baeldung.com\/wp-content\/uploads\/2023\/09\/controller_coverage-300x55.png\" alt=\"\" width=\"747\" height=\"137\" srcset=\"https:\/\/www.baeldung.com\/wp-content\/uploads\/2023\/09\/controller_coverage-300x55.png 300w, https:\/\/www.baeldung.com\/wp-content\/uploads\/2023\/09\/controller_coverage-1024x186.png 1024w, https:\/\/www.baeldung.com\/wp-content\/uploads\/2023\/09\/controller_coverage-768x140.png 768w, https:\/\/www.baeldung.com\/wp-content\/uploads\/2023\/09\/controller_coverage-100x18.png 100w, https:\/\/www.baeldung.com\/wp-content\/uploads\/2023\/09\/controller_coverage.png 1172w\" sizes=\"(max-width: 747px) 100vw, 747px\" \/><\/a><\/p>\n<p>As expected, the constructor and the <em>fullyTested()<\/em> and <em>indirectlyTestingServiceMethod()<\/em> methods are covered by the tests, whereas <em>notTested()<\/em> isn&#8217;t covered.<\/p>\n<p>Let&#8217;s now have a look at the report for the service class:<\/p>\n<p><a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/www.baeldung.com\/wp-content\/uploads\/2023\/09\/service_coverage.png\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-165291\" src=\"https:\/\/www.baeldung.com\/wp-content\/uploads\/2023\/09\/service_coverage-300x60.png\" alt=\"\" width=\"755\" height=\"151\" srcset=\"https:\/\/www.baeldung.com\/wp-content\/uploads\/2023\/09\/service_coverage-300x60.png 300w, https:\/\/www.baeldung.com\/wp-content\/uploads\/2023\/09\/service_coverage-1024x205.png 1024w, https:\/\/www.baeldung.com\/wp-content\/uploads\/2023\/09\/service_coverage-768x154.png 768w, https:\/\/www.baeldung.com\/wp-content\/uploads\/2023\/09\/service_coverage-100x20.png 100w, https:\/\/www.baeldung.com\/wp-content\/uploads\/2023\/09\/service_coverage.png 1193w\" sizes=\"(max-width: 755px) 100vw, 755px\" \/><\/a><\/p>\n<p>This time, let&#8217;s focus on the <em>coveredByIntegrationTest()<\/em> method. As we know, no test in the service module tests this method. The only test that passes through this method&#8217;s code is inside the controller module. However, Jacoco recognized that there is a test for this method. In this case, the word aggregation takes its whole meaning!<\/p>\n<h2 id=\"bd-conclusion\" data-id=\"conclusion\">5. Conclusion<\/h2>\n<div class=\"bd-anchor\" id=\"conclusion\"><\/div>\n<p>In this article, we created a multi-module project and gathered the test coverage thanks to Jacoco.<\/p>\n<p>Let&#8217;s recall that we need to run the preparation phase before the tests, while the aggregation takes place after them. To go further, we can use a tool like <a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/www.baeldung.com\/sonarqube-jacoco-code-coverage\">SonarQube<\/a> to get a nice overview of the coverage result.<\/p>\n<p>As always, the code is available <a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/github.com\/eugenp\/tutorials\/tree\/master\/maven-modules\/jacoco-coverage-aggregation\">over on GitHub<\/a>.<\/p>\n<p><Img align=\"left\" border=\"0\" height=\"1\" width=\"1\" alt=\"\" style=\"border:0;float:left;margin:0;padding:0;width:1px!important;height:1px!important;\" hspace=\"0\" src=\"https:\/\/feeds.feedblitz.com\/~\/i\/792373688\/0\/baeldung\"><\/p>\n<div style=\"clear:both;padding-top:0.2em;\"><a title=\"Like on Facebook\" href=\"https:\/\/feeds.feedblitz.com\/_\/28\/792373688\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/fblike20.png\" style=\"border:0;margin:0;padding:0;\"><\/a>&#160;<a title=\"Pin it!\" href=\"https:\/\/feeds.feedblitz.com\/_\/29\/792373688\/baeldung,https%3A%2F%2Fwww.baeldung.com%2Fwp-content%2Fuploads%2F2021%2F09%2FJava-8-Featured-1024x536.png\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/pinterest20.png\" style=\"border:0;margin:0;padding:0;\"><\/a>&#160;<a title=\"Tweet This\" href=\"https:\/\/feeds.feedblitz.com\/_\/24\/792373688\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/twitter20.png\" style=\"border:0;margin:0;padding:0;\"><\/a>&#160;<a title=\"Subscribe by email\" href=\"https:\/\/feeds.feedblitz.com\/_\/19\/792373688\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/email20.png\" style=\"border:0;margin:0;padding:0;\"><\/a>&#160;<a title=\"Subscribe by RSS\" href=\"https:\/\/feeds.feedblitz.com\/_\/20\/792373688\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/rss20.png\" style=\"border:0;margin:0;padding:0;\"><\/a>&#160;<a rel=\"NOFOLLOW\" title=\"View Comments\" href=\"https:\/\/www.baeldung.com\/maven-jacoco-multi-module-project#comments\"><img decoding=\"async\" height=\"20\" style=\"border:0;margin:0;padding:0;\" src=\"https:\/\/assets.feedblitz.com\/i\/comments20.png\"><\/a>&#160;<a title=\"Follow Comments via RSS\" href=\"https:\/\/www.baeldung.com\/maven-jacoco-multi-module-project\/feed\"><img decoding=\"async\" height=\"20\" style=\"border:0;margin:0;padding:0;\" src=\"https:\/\/assets.feedblitz.com\/i\/commentsrss20.png\"><\/a>&nbsp;<\/p>\n<div style=\"clear:left;\"><a rel=\"NOFOLLOW\" href=\"https:\/\/www.baeldung.com\/maven-jacoco-multi-module-project#comments\"><\/p>\n<h3>Comments<\/h3>\n<p><\/a><\/p>\n<ul>\n<li><a rel=\"NOFOLLOW\" href=\"https:\/\/www.baeldung.com\/maven-jacoco-multi-module-project#comment-14892\">Hello thanks for this tuto. I already faced this and had a &#8230;<\/a> <i>by Marot<\/i><\/ul>\n<\/div>\n<p>&#160;<\/p><\/div>\n\n<p class=\"syndicated-attribution\"><figure class= \\\"wp-block-image alignnone \\\"><img src= \\\"http:\/\/itteacheritfreelance.hk\/test\/wordpress\/wp-content\/uploads\/2016\/05\/logo2-2.png\\\" alt=\\\"IT\u96fb\u8166\u88dc\u7fd2 java\u88dc\u7fd2 \u70ba\u5927\u5bb6\u914d\u5c0d\u96fb\u8166\u88dc\u7fd2,IT freelance, \u79c1\u4eba\u8001\u5e2b, PHP\u88dc\u7fd2,CSS\u88dc\u7fd2,XML,Java\u88dc\u7fd2,MySQL\u88dc\u7fd2,graphic design\u88dc\u7fd2,\u4e2d\u5c0f\u5b78ICT\u88dc\u7fd2,\u4e00\u5c0d\u4e00\u79c1\u4eba\u88dc\u7fd2\u548cFreelance\u81ea\u7531\u5de5\u4f5c\u914d\u5c0d\u3002\\\"\/><figcaption>\u7acb\u523b\u8a3b\u518a\u53ca\u5831\u540d\u96fb\u8166\u88dc\u7fd2\u8ab2\u7a0b\u5427!<\/figcaption><\/figure>\r\n<\/br>Find A Teacher Form:\r\n<\/br>https:\/\/docs.google.com\/forms\/d\/1vREBnX5n262umf4wU5U2pyTwvk9O-JrAgblA-wH9GFQ\/viewform?edit_requested=true#responses\r\n<\/br><\/br>Email:\r\n<\/br>public1989two@gmail.com<br><br><br><br><br><br><br>\r\n<a href=www.itsec.hk style=color:#FFFFFF;>www.itsec.hk<\/a><br>\r\n<a href=\\\"www.itsec.vip\\\" style=color:#FFFFFF;>www.itsec.vip<\/a><br>\r\n<a href=\\\"www.itseceu.uk\\\" style=color:#FFFFFF;>www.itseceu.uk<\/a><br><\/p>","protected":false},"excerpt":{"rendered":"<div class=\"mh-excerpt\"><p><img decoding=\"async\" src=\"https:\/\/www.baeldung.com\/wp-content\/uploads\/2021\/09\/Java-8-Featured-1024x536.png\" class=\"webfeedsFeaturedVisual wp-post-image\" alt=\"\" loading=\"lazy\"><\/p>\n<p>Learn how to build a Maven multi-module project with Jacoco coverage.<\/p>\n<div><a title=\"Like on Facebook\" href=\"https:\/\/feeds.feedblitz.com\/_\/28\/792373688\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/fblike20.png\"><\/a>\u00a0<a title=\"Pin it!\" href=\"https:\/\/feeds.feedblitz.com\/_\/29\/792373688\/baeldung,https%3A%2F%2Fwww.baeldung.com%2Fwp-content%2Fuploads%2F2021%2F09%2FJava-8-Featured-1024x536.png\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/pinterest20.png\"><\/a>\u00a0<a title=\"Tweet This\" href=\"https:\/\/feeds.feedblitz.com\/_\/24\/792373688\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/twitter20.png\"><\/a>\u00a0<a title=\"Subscribe by email\" href=\"https:\/\/feeds.feedblitz.com\/_\/19\/792373688\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/email20.png\"><\/a>\u00a0<a title=\"Subscribe by RSS\" href=\"https:\/\/feeds.feedblitz.com\/_\/20\/792373688\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/rss20.png\"><\/a>\u00a0<a rel=\"NOFOLLOW\" title=\"View Comments\" href=\"https:\/\/www.baeldung.com\/maven-jacoco-multi-module-project#comments\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/comments20.png\"><\/a>\u00a0<a title=\"Follow Comments via RSS\" href=\"https:\/\/www.baeldung.com\/maven-jacoco-multi-module-project\/feed\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/commentsrss20.png\"><\/a>\u00a0<\/p>\n<div><a rel=\"NOFOLLOW\" href=\"https:\/\/www.baeldung.com\/maven-jacoco-multi-module-project#comments\"><\/p>\n<h3>Comments<\/h3>\n<p><\/a><\/p>\n<ul>\n<li><a rel=\"NOFOLLOW\" href=\"https:\/\/www.baeldung.com\/maven-jacoco-multi-module-project#comment-14892\">Hello thanks for this tuto. I already faced this and had a &#8230;<\/a> <i>by Marot<\/i><\/li>\n<\/ul>\n<\/div>\n<p>\u00a0<\/p><\/div>\n<\/div>","protected":false},"author":1980,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"slim_seo":{"title":"Maven Multi-Module Project Coverage With Jacoco - ITTeacherITFreelance.hk","description":"Learn how to build a Maven multi-module project with Jacoco coverage. \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Comments Hello thanks for this tuto. I already faced this and had a ... by M"},"footnotes":""},"categories":[6,1307],"tags":[10567],"_links":{"self":[{"href":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/wp-json\/wp\/v2\/posts\/326896"}],"collection":[{"href":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/wp-json\/wp\/v2\/users\/1980"}],"replies":[{"embeddable":true,"href":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/wp-json\/wp\/v2\/comments?post=326896"}],"version-history":[{"count":1,"href":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/wp-json\/wp\/v2\/posts\/326896\/revisions"}],"predecessor-version":[{"id":326897,"href":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/wp-json\/wp\/v2\/posts\/326896\/revisions\/326897"}],"wp:attachment":[{"href":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/wp-json\/wp\/v2\/media?parent=326896"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/wp-json\/wp\/v2\/categories?post=326896"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/wp-json\/wp\/v2\/tags?post=326896"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}