La recherche Maven javadoc redirige vers " / undefined/.." URL


J'ai généré javadoc avec javadoc maven plugin 3.0.1 et Java 9. Cependant, lorsque j'utilise la nouvelle capacité de recherche et que je choisis une classe, elle redirige vers "Fichier introuvable"...

Il y a undefined dans l'URL (par exemple "../target/site/apidocs/indéfini/com/mycompany/Maclasse.html"), qui s'il est supprimé, charge la page correctement.

Pourriez-vous m'aider avec la bonne configuration pour générer java doc (débarrassez-vous de ce undefined), afin que la capacité de recherche charge le html page amende?

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-javadoc-plugin</artifactId>
    <version>${version.maven-javadoc-plugin}</version>
        <executions>
            <execution>
                <id>javadoc</id>
                <goals>
                    <goal>javadoc</goal>
                </goals>
                <phase>prepare-package</phase>
                <configuration>
                    <doclint>none</doclint>
                    <dependencySourceIncludes>
                       <dependencySourceInclude>com.some:some</dependencySourceInclude>
                    </dependencySourceIncludes>
                    <doctitle>Title - ${project.version}</doctitle>
                    <includeDependencySources>true</includeDependencySources>
                    <windowtitle>Title</windowtitle>
                </configuration>
            </execution>
        </executions>

Author: Radoslav Ivanov, 2018-09-14

5 answers

Cela fonctionne à l'aide de l'option suivante dans la configuration du plugin java doc maven

<additionalJOption>--no-module-directories</additionalJOption>
 15
Author: Radoslav Ivanov, 2018-11-02 04:06:46

C'est un peu un hack, mais comme @Martin Goikl'a mentionné dans sa réponse, en spécifiant --no-module-directories casse tous les liens externes vers les classes standard en raison des noms de modules manquants. Comme l'OP l'a mentionné dans un commentaire, getURLPrefix(ui) de search.js est ce qui génère les noms des modules. Donc après quelques recherches autour, j'ai trouvé que le problème peut être résolu en ajoutant ceci à la fin de search.js:

getURLPrefix = function(ui) {
    return "";
};

, Qui remplace essentiellement la définition de getURLPrefix pour renvoyer une chaîne vide pas indépendamment de ce que. Comme il ne doit être ajouté à la fin d'un fichier, il devrait être assez facile à automatiser avec n'importe quel outil de génération de code ou une commande.

Par exemple, si vous utilisez Gradle, les éléments suivants peuvent être ajoutés à build.gradle:

// Needed to fix Javadoc search
// See comments below
final JAVADOC_FIX_SEARCH_STR = '\n\n' +
'getURLPrefix = function(ui) {\n' +
'    return \'\';\n' +
'};\n'

tasks.withType(Javadoc) {
    // Link to external docs
    options.with {
        // Example: Java 11 API documentation
        links 'https://docs.oracle.com/en/java/javase/11/docs/api/'
    }

    doLast {
        // Append the fix to the file
        def searchScript = new File(destinationDir.getAbsolutePath() + '/search.js')
        searchScript.append JAVADOC_FIX_SEARCH_STR
    }
}
 3
Author: Tyler Tian, 2019-09-11 01:51:28

Chaque fichier .html généré par Javadoc contient la définition de variable suivante:

var useModuleDirectories = true;

Qui affecte le comportement de la fonction getURLPrefix() dans search.js:

function getURLPrefix(ui) {
    var urlPrefix="";
    if (useModuleDirectories) {
        ...
    }
    return urlPrefix;
}


Par conséquent, nous pouvons contourner ce problème en remplaçant la valeur de useModuleDirectories par false , ce qui est possible en spécifiant la balise de script suivante dans l'option -bottom:

<script>
if (typeof useModuleDirectories !== 'undefined') {
  useModuleDirectories = false;
}
</script>

Notez que vous devez également spécifier l'option --allow-script-in-comments afin que Javadoc ne se plaint pas de l'utilisation du <script/> tags dans les commentaires.


Utilisation du plugin Javadoc maven

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-javadoc-plugin</artifactId>
    <version>${javadoc.pluginVersion}</version>
    <executions>
        <execution>
            <id>javadoc</id>
            <goals>
                <goal>javadoc-no-fork</goal>
                <goal>jar</goal>
            </goals>
            <phase>process-resources</phase>
            <configuration>
                <bottom>
                <![CDATA[
                    <script>
                    if (typeof useModuleDirectories !== 'undefined') {
                      useModuleDirectories = false;
                    }
                    </script>
                ]]>
                </bottom>
                <additionalJOption>--allow-script-in-comments</additionalJOption>
 3
Author: trustin, 2020-02-07 23:13:38

Cela résout en effet le lien "Recherche" vers ../indéterminé/... problème. Il y a cependant un effet secondaire désagréable: des liens vers des classes standard ou des interfaces dirigées vers par exemple https://docs.oracle.com/en/java/javase/12/docs/api/... sera cassé en raison de noms de modules manquants.

Envisager par exemple des liens vers java.lang.String maintenant incorrectement pointant vers https://docs.oracle.com/en/java/javase/12/docs/api/java/lang/String.html plutôt que vers https://docs.oracle.com/en/java/javase/12/docs/api/java.la base de/java/lang/String.html.

 1
Author: Martin Goik, 2019-05-31 11:24:02

Ajout <additionalJOption>-no-module-directories</additionalJOption>

A travaillé pour moi. avec un - pas --

 0
Author: user2203102, 2020-11-11 12:53:38