maven javado c: исправление не позволяет автоматически исправлять документы - PullRequest
4 голосов
/ 02 августа 2020

Я переношу проект MWS Feeds API с Ant на Maven. См. MWS Feeds Maven port .

Я постоянно получаю одну и ту же ошибку, которая не имеет для меня смысла при выполнении mvn javadoc:fix.

[ERROR] Не удалось выполнить цель org. apache .maven.plugins: maven-javado c -plugin: 3.2.0: fix (default-cli) в проекте amazon-mws-feeds-maven: Execution default-cli of target org . apache .maven.plugins: maven-javado c -plugin: 3.2.0: ошибка исправления: отсутствовал требуемый класс при выполнении org. apache .maven.plugins: maven-javado c -plugin : 3.2.0: исправить: com / amazonaws / mws / feeds / model / ReportInfo (неправильное имя: com / amazonaws / mws / feeds / model // ReportInfo)

Моя версия Maven:

Java version: 11.0.2, vendor: Oracle Corporation, runtime: /Users/dmytro/.sdkman/candidates/java/11.0.2-open
Default locale: en_GB, platform encoding: UTF-8
OS name: "mac os x", version: "10.15.6", arch: "x86_64", family: "mac"

Как отладить и исправить? Я искал в StackOverflow, выполнял поиск с помощью обычного поиска и запускал mvn -X clean install, но пока никаких результатов.

Ответы [ 2 ]

1 голос
/ 05 августа 2020

Допущение

Сообщение об ошибке означает, что разрешение типа не удалось ( класс отсутствует ), и это, похоже, происходит из-за того, что плагин пытается разрешить слегка недопустимый путь (обратите внимание на двойную косую черту в "неправильное имя: com / amazonaws / mws / feeds / model // ReportInfo" ).

Определение проблемы

Я начал с mvn -X javadoc:fix, чтобы включить отладку. Вывод оказался очень полезным:

[DEBUG] Analyzing com.amazonaws.mws.feeds.model.GetFeedSubmissionListByNextTokenResult
[INFO] Saving changes to com.amazonaws.mws.feeds.model.GetFeedSubmissionListByNextTokenResult
[DEBUG] Analyzing com.amazonaws.mws.feeds.model.UpdateReportAcknowledgementsResult
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------

Последний успешно обработанный класс был GetFeedSubmissionListByNextTokenResult (порядок обработки не всегда одинаковый, но это не имеет значения), но UpdateReportAcknowledgementsResult не удалось. Теперь мы можем сосредоточиться на этом классе.

Дальнейшее исследование трассировки стека показало, что исключение произошло, когда плагин исправлял (заменял) теги ссылок (знакомый тег {@link ClassName} javado c):

    at com.thoughtworks.qdox.type.TypeResolver.resolveTypeInternal (TypeResolver.java:187)
    at com.thoughtworks.qdox.type.TypeResolver.resolveType (TypeResolver.java:119)
    at org.apache.maven.plugins.javadoc.AbstractFixJavadocMojo.replaceLinkTags (AbstractFixJavadocMojo.java:1858)
    at org.apache.maven.plugins.javadoc.AbstractFixJavadocMojo.updateJavadocComment (AbstractFixJavadocMojo.java:1808)
    at org.apache.maven.plugins.javadoc.AbstractFixJavadocMojo.updateJavadocComment (AbstractFixJavadocMojo.java:1756)
    at org.apache.maven.plugins.javadoc.AbstractFixJavadocMojo.updateEntityComment (AbstractFixJavadocMojo.java:1632)
    at org.apache.maven.plugins.javadoc.AbstractFixJavadocMojo.fixMethodComment (AbstractFixJavadocMojo.java:1486)
    at org.apache.maven.plugins.javadoc.AbstractFixJavadocMojo.processFix (AbstractFixJavadocMojo.java:1100)

Теперь мы знаем, что искать в этом классе.

Root причина

Реальная проблема была сразу очевидна, например, в UpdateReportAcknowledgementsResult: 147

     // @param values a {@link .ReportInfo} object.

Эта точка перед именем класса неправильно обрабатывается в TypeResolver QDOX. Как только я удалил все {@link .X} вхождения, плагин был успешно запущен.

Я предполагаю, что эти точки были помещены туда по ошибке во время масштабной операции поиска и замены. Один мой друг однажды сделал нечто подобное ...

1 голос
/ 05 августа 2020

@ DmytroChasovskyi Это не ответ, а набор вещей, которые вы можете попробовать, чтобы помочь решить проблему.

Возможно, вы уже пробовали это, но если это не так, вызовите цель maven, изолированная и с флагом -e.

mvn -e javadoc:fix

Возможно, это даст вам дополнительную информацию о том, что происходит.

Попытайтесь уменьшить количество элементов, которые должен быть исправлен. Как вы можете видеть в docs , у вас есть флаги, которые позволяют вам выбирать, должны ли быть исправлены комментарии к классам, полям или методам. Поиграйте с ним, это может помочь.

Вы также можете изменить уровень соответствия jdk: вы компилируете для Java 1.6. Просто для ускорения решения проблемы, если возможно, используйте другую java целевую версию.

И последнее, что вы можете попробовать, это использовать другую JVM для выполнения сборки и увидеть, что проблема все еще существует.

Наконец, цель исправления плагина Maven Javavo c сильно зависит от QDOX; это может быть некоторая работа, но, возможно, вы можете реализовать какой-то тест непосредственно с этой библиотекой и попытаться обработать свой код, чтобы увидеть, сохраняется ли проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...