Как получить имя файла, отображаемого с помощью "mvn site" в site.vm?

Я создаю Maven Skin (см. https://maven.apache.org/doxia/doxia-sitetools/doxia-site-renderer/).

Мой site.vm должен выделять ссылки в навигационной панели, если ссылка является текущим отображаемым файлом.

Поэтому мне нужно знать имя HTML-файла, который отображает site.vm.

Макросы $ currentFileName и $alignFileName отлично работают для обычных документов (например, из источника Markdown). Но для многостраничных документов, которые генерирует плагин Maven Report, эти макросы продолжают возвращать имя главной страницы отчета, а не отображаемую страницу.

Как получить фактическое имя отображаемого файла, а не только имя главной HTML-страницы плагина Maven Report?

Я попробовал следующие макросы без удачи:

  • $alignedFileName
  • $currentFileName
  • $docRenderingContext.getInputName()
  • $docRenderingContext.getOutputName()

Все они возвращают одно и то же значение, которое является именем файла HTML главной страницы плагина Maven Report.

KmReference.java (плагин Maven Report, создание нескольких страниц с помощью getSinkFactory(). CreateSink (outputDirectory, pageFilename)):

public class KmReference extends AbstractMavenReport {

    public String getOutputName() {
        return "km-reference";
    }

…

    @Override
    protected void executeReport(Locale locale) throws MavenReportException {

…

            // Create a new sink!
            Sink kmSink;
            try {
                kmSink = getSinkFactory().createSink(outputDirectory, pageFilename);
            } catch (IOException e) {
                throw new MavenReportException("Could not create sink for " + pageFilename + " in " + outputDirectory.getAbsolutePath(), e);
            }

site.vm (скорость):

alignedFileName = $alignedFileName

currentFileName = $currentFileName

getDoxiaSourcePath() = $docRenderingContext.getDoxiaSourcePath()

getGenerator() = $docRenderingContext.getGenerator()

getInputName() = $docRenderingContext.getInputName()

getOutputName() = $docRenderingContext.getOutputName()

getParserId() = $docRenderingContext.getParserId()

getRelativePath() = $docRenderingContext.getRelativePath()

Во всех HTML-файлах, сгенерированных моим плагином Maven Report, я получу одинаковые значения:

another-page.html (не km-reference.html):

alignedFileName = km-reference.html

currentFileName = km-reference.html

getDoxiaSourcePath() = $docRenderingContext.getDoxiaSourcePath()

getGenerator() = com.sentrysoftware.maven:patrolreport-maven-plugin:2.0:km-reference

getInputName() = km-reference.html

getOutputName() = km-reference.html

getParserId() = $docRenderingContext.getParserId()

getRelativePath() = .

Я ожидал бы, что по крайней мере $alignFileName вернет значение another-page.html.

2 ответа

Решение

Эта проблема ( https://issues.apache.org/jira/browse/MSITE-842) была решена с помощью PR, предоставленного OP.

Это была ошибка в плагине Maven -site-plugin Maven (та, которая запускается при запуске "mvn site").

Это было исправлено в версии 3.8 плагина (который еще не был выпущен на момент написания).

Другие вопросы по тегам