El mensaje "no se puede encontrar el símbolo" de maven es inútil

81

Esta es una pregunta realmente simple, y probablemente sea una configuración en algún lugar que no conozco, pero Google está siendo particularmente inútil para esta pregunta, dando resultados sobre errores de compilación, no sobre cómo cambiar los mensajes de error de compilación.

Cuando construyo mi proyecto con maven, me dará mensajes de error formateados aproximadamente de la siguiente manera:

[ERROR] /path/to/source/Main.java:[13,8] error: no se puede encontrar el símbolo

Cuando construyo con ant o javac, en realidad me dirá el símbolo que no puede encontrar en el mensaje de error. maven me da un número de línea y una posición de carácter, pero mostrar el símbolo real sería más útil. La línea de arriba es la única línea dada para cada uno de los errores de "no se puede encontrar el símbolo". No hay una línea arriba o abajo que indique el símbolo. Me imagino que tiene que haber alguna forma de conseguir que Maven me diga esa información, pero no sé cuál es. Probé la opción -e, ya que mvn me dijo que intentara usarla, pero me dio un rastreo de maven para el error, no el símbolo real.

¿Alguna ayuda?

Aquí está la salida de mvn --version

Apache Maven 3.0.4 (rNON-CANONICAL_2012-10-24_11-25_mockbuild; 2012-10-24 07:25:04-0400)
Maven home: /usr/share/maven
Java version: 1.7.0_09-icedtea, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.9.x86_64/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.6.6-1.fc17.x86_64", arch: "amd64", family: "unix"

Y aquí hay un mensaje de error de ejemplo (inútil), exactamente como la salida de maven (solo con directorios abreviados):

[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR : 
[INFO] -------------------------------------------------------------
[ERROR] /path/to/source/SoundEngineFilePanel.java:[33,8] error: cannot find symbol
[ERROR]  class SoundEngineFilePanel
/path/to/source/SoundEngineFilePanel.java:[36,8] error: cannot find symbol
[INFO] 2 errors 
[INFO] -------------------------------------------------------------

Los símbolos que no puede encontrar son "fakeThing" y "fakeThing2", no SoundEngineFilePanel.

Mattg
fuente
¿Puede proporcionar información sobre la versión (Maven en particular), etc.? Esto no es lo que me pasa.
Dave Newton
Es cierto que el mensaje de maven "no se puede encontrar el símbolo" no es muy útil. Puedo decirles mi caso en el que mi código estuvo usando un método particular de una biblioteca de terceros durante mucho tiempo, pero de alguna manera el método se eliminó de la biblioteca de terceros. Cuando maven estaba compilando el código, estaba fallando. Si el mensaje hubiera sido "método no encontrado" en lugar de "no se puede encontrar símbolo", habría sido muy eficaz y habría consumido menos tiempo.
Atul S.
Para las personas que se sientan inclinadas a agregar otra respuesta a esta pregunta. Lea la pregunta con atención. NO se trata de cómo corregir los errores de compilación "no se puede encontrar el símbolo" (en Maven). Se trata de cómo conseguir que Maven proporcione mensajes de error de compilación más informativos ; es decir, mensajes que incluyen el contexto del código fuente ... me gusta javacy Anthace.
Stephen C

Respuestas:

41

Este es un error en el complemento del compilador de Maven, relacionado con JDK7, creo. Funciona bien con JDK6.

Peter Svensson
fuente
5
Parece estar arreglado en maven-compiler-plugin 3.1. Vea la respuesta de george-papatheodorou .
Jared Beck
28
Esto no es una solución ... el error de compilación sigue ocurriendo en Java 8.
Eta
Comenzó a suceder cuando Windows 10 se bloqueó. ¿Podría ser eso un factor?
TheRealChx101
1
Para @Eta (y 27 más o menos otros que hicieron +1 en el comentario anterior): creo que se está perdiendo el punto. Esta pregunta trata sobre mensajes inútiles de Maven. Esta respuesta habla sobre cómo hacer que los mensajes de error de compilación sean más útiles. No soluciona el problema que causó el error de compilación en primer lugar. ¡Ese problema está (normalmente) en su código fuente! Consulte ¿Qué significa un error "No se puede encontrar el símbolo" o "No se puede resolver el símbolo"? .
Stephen C
35

actualizar a 3.1:

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.1</version>
    <configuration>
        <source>1.7</source>
        <target>1.7</target>
    </configuration>
</plugin>
George Papatheodorou
fuente
¿Cuál es la mejor manera de determinar la última versión de este complemento? Todo lo que pude encontrar es esta página: maven.apache.org/plugins/maven-compiler-plugin/… Gracias.
Jared Beck
@JaredBeck parece que puedes encontrar eso aquí: mvnrepository.com/artifact/org.apache.maven.plugins/…
DSimon
6

En mi caso, el problema estaba en un frasco secundario que no se reconstruyó ya que agregué una nueva clase, pom.xml de ese frasco secundario no estaba relacionado con mi pom.xml fallido como relación hijo-padre (usando <parent>etiqueta). Así que reconstruí el frasco secundario después del cual desapareció el error.

a.parfenov
fuente
Este también era mi problema. Si bien ciertamente existen errores en Maven, esperaría que, en la mayoría de los casos, los errores de Maven o los problemas de compilación se expliquen en escenarios como estos.
Michael M
4

Yo tuve el mismo problema. La razón fue que tenía dos archivos JAR que no se agregaron a través de la dependencia de Maven, por lo que cuando ejecuté mvn compile, la consola muestra el error:

No se puede encontrar el símbolo, Clase ... ".

Arreglarlo:

  1. Eliminar los archivos JAR de la ruta de compilación
  2. Agregar para construir ruta
  3. correr mvn compile
Ajax
fuente
2
¿Podría enumerar los pasos que utilizó para eliminar los archivos JAR de su ruta de compilación? ¿Recibo el mismo error cuando intento eliminar mi carpeta de destino y volver a compilar usando maven? Gracias
turnip424
3

Esto ocurre también debido a este problema, es decir, al reempaquetado que definió en el archivo POM.

Elimine esto del archivo pom en el complemento maven. Funcionará

<executions>
    <execution>
        <goals>
             <goal>repackage</goal>
        </goals>
    </execution>
</executions>
Anto Livish A
fuente
3

En mi caso, estaba usando una dependencia con alcance <scope>test</scope>. Esto hizo que la clase estuviera disponible en tiempo de desarrollo pero, en tiempo de compilación, recibí este mensaje.

Gire el alcance de la clase para <scope>provided</scope>resolver el problema.

Joabe Lucena
fuente
2

Incluso estoy usando Java 7, maven 2.2.1 y recibí el mismo error, <scope>tests</scope>eliminé mi pom y usé

mvn clean -DskipTests=true install para construir con éxito mis proyectos, sin actualizar mi versión maven.

AabinGunz
fuente
"mvn clean -DskipTests = true" ¡instalar es un comando mágico! Gracias por compartir. (Por cierto, no toqué mis <scope> pruebas </scope>)
Eta
1

Si tiene dependencia de algún otro proyecto en el espacio de trabajo y estos proyectos no se construyen correctamente, puede producirse dicho error. intente construir proyectos tan dependientes primero, puede ayudar

Piyush Gharote
fuente
0

Esta no es una función de Maven; es una función del compilador. Mirar de cerca; la información que busca se encuentra probablemente en la siguiente línea.

Isaac
fuente
Recibí el mismo error. El error posterior dio el nombre de una dependencia que faltaba en el proyecto (en este caso, una clase de biblioteca org.apache.poi.xssf).
Juan
0

SOLUCIÓN: @Antes de construir su componente (usando mvn clean install). Construya el proyecto completo una vez y vuelva a construir su componente

POR QUÉ:
Recibo este error muchas veces. La mayoría de las veces intentaré construir mi componente solo (ya que no he realizado cambios en ningún otro lugar).

Correcto, pero ese jar adicional que se ha descargado recientemente podría haberse visto afectado por los cambios realizados por un tercero (dentro de su componente). Hacer una instalación limpia completa de mvn en todo el proyecto me salvó muchas veces

Ganesh Srini
fuente
-1

Supongo que el compilador se queja de una anotación no válida. He notado que Eclipse no muestra todos los errores, como una coma al final de una matriz en una anotación. Pero el estándar lo javachace.

asgoth
fuente
La línea de la que se queja es fakeThing = new JPanel(). Es solo un error estándar "no se puede encontrar el símbolo" para el que javac mostraría "fakeThing". maven simplemente no lo muestra.
Mattg
-1

Estaba teniendo un problema similar en Eclipse STS cuando intentaba ejecutar una instalación de Maven en un proyecto. Había cambiado algunas versiones en las dependencias de mi archivo pom.xml para ese proyecto y los proyectos a los que apuntaban esas dependencias. Lo resolví ejecutando una instalación de Maven en todos los proyectos que cambié y luego ejecutando la instalación en el original nuevamente.

Stoic_Observer
fuente
-1

Tuve el mismo problema con maven. Sucede que mi problema era que maven estaba generando las carpetas con diferentes nombres de casos. Esperaba un .service.MyFile, pero en la carpeta de destino era Service / MyFile y java distingue entre mayúsculas y minúsculas. Me tomó unas horas descubrirlo, te recomiendo que lo revises.

Aléxia Dorneles
fuente
-1

Generalmente, este error aparecerá cuando la versión de su código de compilación sea diferente a la del código escrito. Por ejemplo, escriba un código que se base en xxx-1.0.0.jar y que una clase tenga el método A, pero el método cambió a B en xxx-1.1.0.jar. Si compila código con xxx-1.1.0.jar, verá el error.

ulises
fuente