2014-07-03 17 views
6

Sto cercando di creare un javadoc aggregato per un progetto a più moduli. Il progetto viene compilato con mvn install -DskipTests (non eseguo test sulla mia macchina). Quando corro mvn validate javadoc:javadoc, funziona e compila tutto il javadoc in ogni cartella \ target \ apidocs. Quindi, quando corro o mvn validate javadoc:javadoc javadoc:aggregate o mvn validate javadoc:aggregate, si verifica un errore parziale con circa 1200 righe di errori. Alcuni esempi di tipi sono:Maven javadoc: javadoc funziona ma javadoc: aggregato genera errori che sembrano errori del compilatore

Failed to execute goal org.apache.maven.plugins:maven-javadoc-plugin:2.9.1:aggregate (default-cli) on project commons-superpom: An error has occurred in JavaDocs report generation: 
[ERROR] Exit code: 1 - C:\workspaces\win\tfs\****\Foo.java:21: type org.springframework.context.ApplicationListener does not take parameters 
[ERROR] public class Foo implements ApplicationContextAware, ApplicationListener<ContextRefreshedEvent> { 
[ERROR]^
. 
. 
. 
C:\workspaces\win\tfs\****\test\Bar.java:52: cannot find symbol 
[ERROR] symbol : class PostInsertEvent 
[ERROR] location: class com.Barclass 
[ERROR] public void BarFunct(PostInsertEvent event) { 
[ERROR]^
[ERROR] C:java.lang.NullPointerException 
[ERROR] at com.sun.tools.javadoc.TypeMaker.getType(TypeMaker.java:67) 
[ERROR] at com.sun.tools.javadoc.TypeMaker.getType(TypeMaker.java:29) 
[ERROR] at com.sun.tools.javadoc.ClassDocImpl.superclassType(ClassDocImpl.java:439) 
[ERROR] at com.sun.tools.doclets.internal.toolkit.util.Util.getAllInterfaces(Util.java:386) 
[ERROR] at com.sun.tools.doclets.internal.toolkit.util.Util.getAllInterfaces(Util.java:424) 
[ERROR] at com.sun.tools.doclets.internal.toolkit.util.ClassTree.processType(ClassTree.java:162) 
[ERROR] at com.sun.tools.doclets.internal.toolkit.util.ClassTree.buildTree(ClassTree.java:114) 
[ERROR] at com.sun.tools.doclets.internal.toolkit.util.ClassTree.<init>(ClassTree.java:73) 
[ERROR] at com.sun.tools.doclets.internal.toolkit.AbstractDoclet.startGeneration(AbstractDoclet.java:104) 
[ERROR] at com.sun.tools.doclets.internal.toolkit.AbstractDoclet.start(AbstractDoclet.java:64) 
[ERROR] at com.sun.tools.doclets.formats.html.HtmlDoclet.start(HtmlDoclet.java:42) 
[ERROR] at com.sun.tools.doclets.standard.Standard.start(Standard.java:23) 
[ERROR] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
[ERROR] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
[ERROR] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
[ERROR] at java.lang.reflect.Method.invoke(Method.java:597) 
[ERROR] at com.sun.tools.javadoc.DocletInvoker.invoke(DocletInvoker.java:269) 
[ERROR] at com.sun.tools.javadoc.DocletInvoker.start(DocletInvoker.java:143) 
[ERROR] at com.sun.tools.javadoc.Start.parseAndExecute(Start.java:340) 
[ERROR] at com.sun.tools.javadoc.Start.begin(Start.java:128) 
[ERROR] at com.sun.tools.javadoc.Main.execute(Main.java:41) 
[ERROR] at com.sun.tools.javadoc.Main.main(Main.java:31) 

Dopo si blocca tutto ciò che resta nella directory/target accanto al mio pom.xml genitore è 2 file 1 è javadoc-fascio-options che contiene un file XML:

<?xml version="1.0" encoding="UTF-8"?> 
<javadocOptions> 
    <docletArtifacts> 
    <docletArtifact /> 
    </docletArtifacts> 
    <tagletArtifacts> 
    <tagletArtifact /> 
    </tagletArtifacts> 
    <excludePackageNames> 
    <excludePackageName>org.foobar.*</excludePackageName> 
    </excludePackageNames> 
    <javadocResourcesDirectory>src/main/javadoc</javadocResourcesDirectory> 
</javadocOptions> 

e il secondo è un sito che contiene un file chiamato apidocs che contiene 3 file javadoc.bat, opzioni e pacchetti. Contengono ciò che sembrano contenere uno script batch per eseguire javadoc.exe con quelle opzioni e su quei pacchetti.

Il primo errore che ho copiato è errato. ApplicationListener è parametrizzato e può assumere ContextRefreshedEvent secondo la documentazione di primavera. PostInsertEvent viene correttamente importato anche nel secondo errore. Non so dove sta succedendo NullPointerException.

La mia configurazione del plugin per javadoc: aggregato è come segue:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-javadoc-plugin</artifactId> 
    <version>${maven-javadoc-plugin.version}</version> 
    <executions> 
      <execution> 
        <id>attach-javadocs</id> 
        <goals> 
          <goal>aggregate</goal> 
        </goals> 
      </execution> 
    </executions> 
    <configuration> 
      <excludePackageNames>org.hibernate.*;org.spring.*<-!-- ;com.***.hibernate.audit --></excludePackageNames> 
      <verbose>true</verbose> 
      <fork>true</fork> 
      <showDeprecation>true</showDeprecation> 
      <showWarnings>true</showWarnings> 
      <source>${java.source.version}</source> 
      <target>${java.target.version}</target> 
      <compilerVersion>${java.source.version}</compilerVersion> 
      <compilerArgument>-Xlint:all</compilerArgument> 
      <minmemory>128m</minmemory> 
      <maxmem>512m</maxmem> 

      <encoding>${project.build.sourceEncoding}</encoding> 

      <additionalparam> 
        -charset UTF-8 
        -docencoding UTF-8 
        -version 
        -author 
        -breakiterator 
        -linksource 
        -sourcetab 4 
        -windowtitle "${project.name} ${project.version} API Reference" 
        -doctitle "${project.name} ${project.version} API Reference" 
        -bottom "Copyright ${project.inceptionYear}-Present ${project.organization.name}. All Rights Reserved." 
        -link http://java.sun.com/javase/6/docs/api/ 
        -link http://jsr311.java.net/nonav/releases/1.1 
      </additionalparam> 
    </configuration> 
</plugin> 

Se escludo il pacchetto ha commentato poi la build funziona bene. Se tuttavia escludo tutti i file nel pacchetto e non il pacchetto, si blocca con errori molto simili. Posso generare javadoc bene in eclissi. Posso fermare l'eccezione di nullpoint se modifico il file di opzioni generato dopo un errore di utilizzo di 3.3.2.GA/hibernate-core-3.3.2.GA.jar invece di hibernate-core-4.1.8.Final.jar e poi eseguo il file bat. Questo produce un sito javadoc aggregato completo, tuttavia, ci sono diversi errori relativi a @Typedef durante l'esecuzione. Javadoc 1.7_60 e 1.6_45 falliscono entrambi nello stesso modo.

+0

Si prega di considerare l'invio della risoluzione come risposta in modo da poter contrassegnarlo come accettato; questa domanda è attualmente presente nell'elenco delle domande senza risposta e questo non è proprio appropriato. – muffin

+0

Certo, non sapevo di poterlo fare grazie. – alexddupree

risposta

1

Risolto: C'è un bug nel compilatore javadoc sia 1.6 che 1.7 dove le annotazioni che non hanno un jar lanciano un NPE. Il compilatore javadoc 1.8 funziona, tuttavia, continuavo a ricevere errori perché non avevo il jar corretto. Ho dovuto esaminare diversi poms come uno dei miei moduli aveva una libreria di ibernazione diversa codificata in esso.

I risultati finali: Quando ho cambiato quella libreria a quella standard Maven non si poteva compilare ma il javadoc: aggregata verrebbe eseguito bene. Anche il passaggio alla versione del mio modulo non ha funzionato. Ho finito per dover rimuovere il modulo dal mio javadoc build usando this. Questo non ha avuto molta importanza in quanto era un modulo sperimentale, ma se ne avessi avuto bisogno avrei semplicemente aggiunto un profilo che mi ha permesso di cambiare la versione su javadoc run.

Spero che nessuno resti bloccato su questo come ho fatto io. :)