Maven javadoc Ricerca reindirizza a " / undefined/.." URL


Ho generato javadoc con javadoc maven plugin 3.0.1 e Java 9. Tuttavia, quando utilizzo la nuova funzionalità di ricerca e seleziono una classe, reindirizza a "File non trovato"...

C'è undefined nell'url (ad esempio "../ target / sito / apidocs / undefined / com / mycompany / MyClass.html"), che se rimosso, carica la pagina correttamente.

Potresti per favore aiutarmi con la configurazione giusta per generare java doc (sbarazzati di questo undefined), quindi la capacità di ricerca carica l'html la pagina va bene?

<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

Ha funzionato con l'aiuto della seguente opzione nella configurazione del plugin java doc maven

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

Questo è un po ' un trucco, ma come @Martin Goikha menzionato in la sua risposta, specificando --no-module-directories interrompe qualsiasi link esterno alle classi standard a causa dei nomi dei moduli mancanti. Come l'OP ha menzionato in un commento, getURLPrefix(ui) di search.js è ciò che genera i nomi dei moduli. Quindi, dopo un po ' di scavo, ho scoperto che il problema può essere risolto aggiungendo questo alla fine di search.js:

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

Che essenzialmente sovrascrive la definizione di getURLPrefix per restituire una stringa vuota no importa cosa. Poiché deve solo essere aggiunto alla fine di un file, dovrebbe essere abbastanza facile automatizzare con qualsiasi strumento di compilazione tramite codice o un comando.

Ad esempio, se si utilizza Gradle, è possibile aggiungere quanto segue a 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

Ogni file .html generato da Javadoc contiene la seguente definizione di variabile:

var useModuleDirectories = true;

Che influenza il comportamento della funzione getURLPrefix() in search.js:

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


Pertanto, possiamo aggirare questo problema sovrascrivendo il valore di useModuleDirectories con false, il che è possibile specificando il seguente tag di script nell'opzione -bottom:

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

Si noti che è necessario specificare anche l'opzione --allow-script-in-comments in modo che Javadoc non si lamenti dell'uso di <script/> tag nei commenti.


Utilizzo del 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

Questo risolve effettivamente il collegamento alla" Ricerca"../indefinito/... problema. C'è tuttavia un brutto effetto collaterale: collegamenti a classi standard o interfacce dirette verso ad esempio https://docs.oracle.com/en/java/javase/12/docs/api/... sarà rotto a causa dei nomi dei moduli mancanti.

Considera ad esempio i collegamenti a java.lang.String che ora puntano erroneamente a https://docs.oracle.com/en/java/javase/12/docs/api/java/lang/String.html piuttosto che verso https://docs.oracle.com/en/java/javase/12/docs/api/java.base/java/lang/String.html.

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

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

Ha funzionato per me. con uno - non --

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