|  | 
| 56 | 56 | import scoverage.reporter.IOUtils; | 
| 57 | 57 | import scoverage.serialize.Serializer; | 
| 58 | 58 | import scoverage.reporter.CoberturaXmlWriter; | 
| 59 |  | -import scoverage.reporter.CoverageAggregator; | 
| 60 | 59 | import scoverage.reporter.ScoverageHtmlWriter; | 
| 61 | 60 | import scoverage.reporter.ScoverageXmlWriter; | 
| 62 | 61 | 
 | 
| @@ -513,6 +512,11 @@ else if ( !module.getPackaging().equals( "pom" ) ) | 
| 513 | 512 |             } | 
| 514 | 513 |         } | 
| 515 | 514 | 
 | 
|  | 515 | +        if ( null == topLevelModule ) | 
|  | 516 | +        { | 
|  | 517 | +            topLevelModule = findAncestorModuleWithShortestBasedir(); | 
|  | 518 | +        } | 
|  | 519 | + | 
| 516 | 520 |         /* Empty report must be generated or top-level site will contain invalid link to non-existent Scoverage report | 
| 517 | 521 |         if ( scoverageDataDirs.isEmpty() ) | 
| 518 | 522 |         { | 
| @@ -547,6 +551,32 @@ else if ( !module.getPackaging().equals( "pom" ) ) | 
| 547 | 551 |         getLog().info( "Coverage aggregated reports completed." ); | 
| 548 | 552 |     } | 
| 549 | 553 | 
 | 
|  | 554 | +    private MavenProject findAncestorModuleWithShortestBasedir() | 
|  | 555 | +    { | 
|  | 556 | +        MavenProject topLevelModule = null; | 
|  | 557 | +        for ( MavenProject module : reactorProjects ) | 
|  | 558 | +        { | 
|  | 559 | +            if ( !module.hasParent() ) | 
|  | 560 | +            { | 
|  | 561 | +                continue; | 
|  | 562 | +            } | 
|  | 563 | + | 
|  | 564 | +            MavenProject ancestorModule = module.getParent(); | 
|  | 565 | +            while ( ancestorModule.hasParent() ) | 
|  | 566 | +            { | 
|  | 567 | +                ancestorModule = ancestorModule.getParent(); | 
|  | 568 | +            } | 
|  | 569 | +            if ( null != topLevelModule && | 
|  | 570 | +                 topLevelModule.getBasedir().getAbsolutePath().length() < | 
|  | 571 | +                 ancestorModule.getBasedir().getAbsolutePath().length() ) | 
|  | 572 | +            { | 
|  | 573 | +                continue; | 
|  | 574 | +            } | 
|  | 575 | +            topLevelModule = ancestorModule; | 
|  | 576 | +        } | 
|  | 577 | +        return null == topLevelModule ? project : topLevelModule; | 
|  | 578 | +    } | 
|  | 579 | + | 
| 550 | 580 |     private void writeReports( Coverage coverage, List<File> sourceRoots, File coberturaXmlOutputDirectory, | 
| 551 | 581 |                                File scoverageXmlOutputDirectory, File scoverageHtmlOutputDirectory ) | 
| 552 | 582 |     { | 
|  | 
0 commit comments