Michael,

first of all thanks for your conceptual thoughts and efforts to improve
both code and documentation.

> Let me know what you think!

I fully agree that the notion that both the output directory and the
report output directory are meant to be *base* directories. I disagree,
however, with that they should default to the same base directory. Hence
https://github.com/apache/maven-reporting-impl/pull/26. I am more in the
Maven Javadoc "fan club" in this case.

Regards
-- 
Alexander Kriegisch
https://scrum-master.de


Michael Osipov schrieb am 23.10.2023 00:53 (GMT +07:00):

> Alexander,
> 
> I have now read the code of all our reporting plugins, 
> maven-reporting-impl and maven-site-plugin.
> 
> Here is my understanding how I expect to work which it is not at the 
> moment and there is a flaw in the system were both MJXR and MJAVADOC 
> apply a hack and I will explain why they do.
> 
> We have
> 
> standalone execution:
>>     @Parameter(defaultValue = "${project.reporting.outputDirectory}", 
>> readonly
>>     = true, required = true)
>>     protected File outputDirectory;
> 
> and
> 
> site execution:
>>     @Parameter(property = "siteOutputDirectory", defaultValue =
>>     "${project.reporting.outputDirectory}")
>>     protected File outputDirectory;
> 
> both point to root directory where all reports put there files in, from 
> the simplest single page one, to multipage to those which are external 
> and operate in subdirectories. Everything below that output directory is 
> fixed and completely subject to the plugin.
> 
> Both o.a.m.reporting.AbstractMavenReport.getReportOutputDirectory() and 
> o.a.m.reporting.AbstractMavenReport.setReportOutputDirectory(File) exist 
> for the sole purpose to accomondate both execution styles. One value is 
> exected through DI (standalone) the other one set (through site). 
> Therefore, in both cases #getReportOutputDirectory() should be used to 
> get the right value to write to.
> In any case #setReportOutputDirectory(File) does *not* contain a 
> directory for the reporting plugin only, but for the entire generated 
> tree of plugins, regardless of 'mvn site' /or/ 'mvn pmd:pmd 
> checkstyle:checkstyle'.
> 
> Now, o.a.m.reporting.MavenReport.getOutputName() has bad documentation 
> because it is actually a relative output *path* to the generated item 
> with the base/root path given by 
> o.a.m.reporting.MavenReport.getReportOutputDirectory(). Again, here is 
> the name completely deceiving. Needs doc update as well.
> 
> You might wonder, what to do now with:
>>     @Override
>>     public String getOutputName() {
>>         return "xref/index";
>>     }
> 
> and
> 
>>     @Override
>>     public void setReportOutputDirectory(File reportOutputDirectory) {
>>         if ((reportOutputDirectory != null)
>>                 &&
>>                 (!reportOutputDirectory.getAbsolutePath().endsWith("xref"))) 
>> {
>>             this.destDir = new File(reportOutputDirectory,
>>             "xref").getAbsolutePath();
>>         } else {
>>             this.destDir = reportOutputDirectory.getAbsolutePath();
>>         }
>>     }
> ?
> 
> Well, while I consider the former is correct, the latter is not:
> * Does one expect to pass *null* as reportOutputDirectory?
> * Why is *this.reportOutputDirectory*  never updated?
> * It expects the report this live under *.../xref*, but ignores
>>     /**
>>      * Folder where the Xref files will be copied to.
>>      */
>>     @Parameter(defaultValue = "${project.reporting.outputDirectory}/xref")
>>     private String destDir;
> * It mixes the the notion of a *pluginReportOutputDirectory* which is 
> passed to the external report generator as a root/base or a multi sink 
> if you want to generate multiple reports under one dir, but have the 
> starting point at *foo/index* (output name) and all resides under *foo/*.
> MJAVADOC does the same trick although it has replaces the literal 'xref' 
> with a field, but the issue remains the same.
> Whether the path component(s) between the root and *index* should be 
> flexible, is upto the plugin (e.g, xref, xref-test, apidocs, etc.), but 
> from my personal PoV changing it does not make:
> * In site execution this has to be carried along
> * If you need to change it otherwise you can rename/move it with an ant 
> task or a subprocessor.
> 
> What I will do not is to create a few issues and PRs to improve the 
> situation and create a PR for JXR on top of 'doxia-2.0.0' how I consider 
> it should be. Some of the method names are unfortunately, but I am 
> afraid it is too hard to change them given they have too widespread use.
> 
> I guess after all, I will need to perform another round of releases with 
> those PRs before I can start new reporting plugin releases. I think what 
> you have raised was long overdue and absoltuely legit.
> 
> Let me know what you think!
> 
> @Hervé, I would also appreciate to hear your opinion on this!
> 
> Michael
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@maven.apache.org
> For additional commands, e-mail: users-h...@maven.apache.org
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@maven.apache.org
For additional commands, e-mail: users-h...@maven.apache.org

Reply via email to