El uso del compilador Eclipse en lugar de javac da como resultado un bloqueo de javadoc

Daniel Pryden :

Resumen:

Me encontré con un problema interesante y no estoy muy seguro de cómo detectarlo:

  • Nuestro proyecto se ha estado construyendo bien durante meses.
  • Cambié el maven-compiler-pluginpara usar el eclipsecompilador en lugar dejavac
  • Ahora cuando corro mvn site, maven-javadoc-pluginfalla
  • Según el seguimiento de la pila, parece que la herramienta Javadoc se bloquea en un archivo de clase creado por el compilador de Eclipse

¿Hay alguna forma de arreglar esto? Si no es así, ¿hay al menos alguna forma de depurarlo más?

Todos los detalles:

Estoy usando Java 1.6.0_27 y Maven 3.0.2.

He estado usando el compilador javac para construir nuestro código base, pero estoy interesado en probar el compilador Eclipse, ya que produce advertencias mucho mejores (y es más configurable de otras formas).

Así que cambié la definición de maven-compiler-pluginen el pom.xml a:

<plugin>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>2.3.2</version>
    <configuration>
        <compilerId>eclipse</compilerId>
        <source>1.6</source>
        <target>1.6</target>
        <compilerArgument>-warn:+boxing,enumSwitch,javadoc,hashCode</compilerArgument>
        <showWarnings>true</showWarnings>
        <showDeprecation>true</showDeprecation>
    </configuration>
    <dependencies>
        <dependency>
            <groupId>org.codehaus.plexus</groupId>
            <artifactId>plexus-compiler-eclipse</artifactId>
            <version>1.8.2</version>
        </dependency>
    </dependencies>
</plugin>

En mi <reporting>sección, tengo:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-javadoc-plugin</artifactId>
    <version>2.8</version>
</plugin>

Hasta aquí todo bien. Hice una mvn clean instally todo va bien, todas las pruebas pasan y todo se ve muy bien.

Pero cuando trato de ejecutar mvn site, cuando llega al informe de Javadoc, falla con lo que parece ser un bloqueo de Javadoc:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-site-plugin:3.0:site (default-site) on project framework: Error during page generation: Error rendering Maven report:
[ERROR] Exit code: 1 - java.lang.StringIndexOutOfBoundsException: String index out of range: -15
[ERROR] at java.lang.String.substring(String.java:1937)
[ERROR] at java.lang.String.substring(String.java:1904)
[ERROR] at com.sun.tools.javac.jvm.ClassReader.simpleBinaryName(ClassReader.java:958)
[ERROR] at com.sun.tools.javac.jvm.ClassReader.readEnclosingMethodAttr(ClassReader.java:930)
[ERROR] at com.sun.tools.javac.jvm.ClassReader.readMemberAttr(ClassReader.java:909)
[ERROR] at com.sun.tools.javac.jvm.ClassReader.readClassAttr(ClassReader.java:1053)
[ERROR] at com.sun.tools.javac.jvm.ClassReader.readClassAttrs(ClassReader.java:1067)
[ERROR] at com.sun.tools.javac.jvm.ClassReader.readClass(ClassReader.java:1560)
[ERROR] at com.sun.tools.javac.jvm.ClassReader.readClassFile(ClassReader.java:1658)
[ERROR] at com.sun.tools.javac.jvm.ClassReader.fillIn(ClassReader.java:1845)
[ERROR] at com.sun.tools.javac.jvm.ClassReader.complete(ClassReader.java:1777)
[ERROR] at com.sun.tools.javac.code.Symbol.complete(Symbol.java:386)
[ERROR] at com.sun.tools.javac.code.Symbol$ClassSymbol.complete(Symbol.java:763)
[ERROR] at com.sun.tools.javac.code.Symbol$ClassSymbol.flags(Symbol.java:695)
[ERROR] at com.sun.tools.javadoc.ClassDocImpl.getFlags(ClassDocImpl.java:105)
[ERROR] at com.sun.tools.javadoc.ClassDocImpl.isAnnotationType(ClassDocImpl.java:116)
[ERROR] at com.sun.tools.javadoc.DocEnv.isAnnotationType(DocEnv.java:574)
[ERROR] at com.sun.tools.javadoc.DocEnv.getClassDoc(DocEnv.java:546)
[ERROR] at com.sun.tools.javadoc.PackageDocImpl.getClasses(PackageDocImpl.java:154)
[ERROR] at com.sun.tools.javadoc.PackageDocImpl.addAllClassesTo(PackageDocImpl.java:170)
[ERROR] at com.sun.tools.javadoc.RootDocImpl.classes(RootDocImpl.java:178)
[ERROR] at com.sun.tools.doclets.internal.toolkit.AbstractDoclet.startGeneration(AbstractDoclet.java:96)
[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)
[ERROR] 
[ERROR] Command line was: "C:\Program Files (x86)\Java\jdk1.6.0_27\jre\..\bin\javadoc.exe" @options @packages
[ERROR] 
[ERROR] Refer to the generated Javadoc files in 'C:\Projects\SMF\framework\target\site\apidocs' dir.
[ERROR] -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

Mi pregunta:

OK, ¿entonces qué cambió? Todo el Javadoc y el sitio de Maven se estaban construyendo bien cuando estaba usando javac, pero tan pronto como cambié al compilador de Eclipse, Javadoc falla.

Peor aún, ni siquiera me dice qué clase hizo que se bloqueara, así que ni siquiera sé por dónde empezar a depurar esto.

Obviamente, por el momento, esto significa que no voy a usar el compilador de Eclipse, sino que me quedaré con javac. Pero tengo curiosidad por saber por qué está sucediendo esto y qué podría hacer para solucionarlo o solucionarlo.

Daniel Pryden :

Finalmente tuve algo de tiempo para investigar esto nuevamente. El maven-javadoc-pluginútilmente deja atrás un javadoc.batscript debajo target/site/apidocscuando el javadoc.exeproceso falla, y pude encontrar el paquete ofensivo podando la lista en el packagesarchivo que se pasa javadoc.exe.

Curiosamente, el código problemático resultó ser la fuente de Java generada por el compilador Google Protocol Buffers . Esto fue una suerte, ya que es aceptable simplemente excluir por completo la fuente generada por protobuf del Javadoc.

Agregué la siguiente definición, tanto en mi <build>como en las <reporting>secciones del POM, y esto resolvió mi problema:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-javadoc-plugin</artifactId>
    <version>2.6.1</version>
    <configuration>
        <excludePackageNames>com.mycompany.myproject.proto</excludePackageNames>
    </configuration>
</plugin>

Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.

En caso de infracción, por favor [email protected] Eliminar

Editado en
0

Déjame decir algunas palabras

0Comentarios
Iniciar sesiónRevisión de participación posterior

Artículos relacionados

¿Por qué el operador java xor bit a bit da como resultado un entero en lugar del tipo de sus operandos?

¿El uso del parámetro "filtros" en la solicitud de la API de Google siempre da como resultado un error?

El uso de un RecyclerView dentro de un Fragmento en lugar de una Actividad da como resultado E / RecyclerView: Sin adaptador adjunto; omitiendo error de diseño

El uso de set_yticklabels da como resultado etiquetas de marca alineadas horizontalmente, en lugar de verticalmente

El uso de ScriptApp.getProjectTriggers () da como resultado un error del servidor

La definición de un bloque en una declaración de cambio da como resultado un error del compilador

El comparador invertido () da como resultado un error del compilador

El uso de bcrypt en Node.js da como resultado un error de validación

El uso de pyinstaller en un script de Python da como resultado una enorme

El uso de chflags del módulo os o dir_util del módulo distutils da como resultado un AttributeError (cuando se ejecuta en una plataforma * nix)

El uso de "mientras se lee" y "para i en" da como resultado un redireccionamiento ambiguo

El uso del operador de propagación de TypeScript da como resultado un error de compilación

El uso del registro r8 como contador de bucle da como resultado un bucle sin fin, ¿por qué?

VisibleDeprecationWarning: el uso de un número no entero en lugar de un entero dará como resultado un error en el futuro

¿Por qué la interpolación de una cadena constante da como resultado un error del compilador?

¿Por qué la interpolación de una cadena constante da como resultado un error del compilador?

SwiftUI: función de llamada en el cuerpo de la vista que modifica EnvironmentObject da como resultado un bucle infinito y un bloqueo de la aplicación

SwiftUI: función de llamada en el cuerpo de la vista que modifica EnvironmentObject da como resultado un bucle infinito y un bloqueo de la aplicación

El uso de la selección booleana en un marco de datos da como resultado un KeyError

El uso de un módulo importado en Python da como resultado un error de permiso denegado

El uso de StringBuilder (...) como valor de identidad en las operaciones de reducción da un resultado impredecible

¿El filtrado de un marco de datos da como resultado un mayor uso de RAM?

¿Por qué el compilador da como resultado un error de "ciclo detectado al procesar ..."?

el uso de lienzo en love2d da como resultado un error de memoria insuficiente

¿Cómo el uso de startrow y stoprow no da como resultado un escaneo de tabla completo en HBase?

El código paralelo da como resultado un uso de memoria inflado en subprocesos (defecto de RStudio)

El uso de unnest_tokens () dentro de la función en R da como resultado un error

El uso del argumento de cadena nula '// N' da como resultado el valor de cadena '/ N' en la tabla HIVE usando el operador Sqoop en Airflow

El uso de una variable de fila en el desplazamiento da como resultado "Vacío"

TOP Lista

CalienteEtiquetas

Archivo