maven "기호를 찾을 수 없음"메시지가 도움이되지 않음


82

이것은 정말 간단한 질문이며 아마도 내가 모르는 설정일 것입니다. 그러나 Google은이 질문에 특히 도움이되지 않고 컴파일 오류 메시지를 변경하는 방법이 아니라 컴파일 오류에 대한 결과를 제공합니다.

maven으로 프로젝트를 빌드하면 대략 다음과 같은 형식의 오류 메시지가 표시됩니다.

[오류] /path/to/source/Main.java:[13,8] 오류 : 기호를 찾을 수 없습니다.

ant 또는 javac로 빌드하면 실제로 오류 메시지에서 찾을 수없는 기호를 알려줍니다. maven은 줄 번호와 문자 위치를 제공하지만 실제 기호를 표시하는 것이 더 도움이 될 것입니다. 위의 줄은 각 "기호를 찾을 수 없음"오류에 대해 제공되는 유일한 줄입니다. 기호를 제공하는 위 또는 아래 선이 없습니다. 메이븐이 그 정보를 말해 줄 방법이 있다고 생각하지만 그게 뭔지 모르겠습니다. mvn이 그것을 사용해 보라고 말했듯이 -e 옵션을 시도했지만 실제 기호가 아닌 오류에 대한 maven 추적을 제공했습니다.

도움이 필요하세요?

다음은 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"

다음은 maven이 출력 한 것과 똑같은 오류 메시지의 예입니다.

[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] -------------------------------------------------------------

찾을 수없는 기호는 SoundEngineFilePanel이 아니라 "fakeThing"및 "fakeThing2"입니다.


버전 정보 (특히 Maven) 등을 제공 할 수 있습니까? 이것은 나에게 일어나는 일이 아닙니다.
Dave Newton

Maven "기호를 찾을 수 없습니다"라는 메시지가별로 도움이되지 않는 것은 사실입니다. 내 코드가 오랫동안 타사 라이브러리의 특정 방법을 사용했지만 어떻게 든 타사 라이브러리에서 제거 된 경우를 말할 수 있습니다. maven이 코드를 컴파일 할 때 실패했습니다. 메시지가 "기호를 찾을 수 없음"대신 "메서드를 찾을 수 없음"이었다면 매우 효과적이고 시간이 덜 소요되었을 것입니다.
Atul S.

이 질문에 대한 또 다른 답변을 추가하고자하는 사람들에게. 질문을주의 깊게 읽으십시오. Maven에서 "cannot find symbol"컴파일 오류를 수정하는 방법이 아닙니다. Maven이 더 많은 정보 를 제공 하는 컴파일 오류 메시지 를 제공하는 방법에 관한 것입니다 . 즉, 소스 코드 컨텍스트를 포함하는 메시지 ... 좋아요 javac, Ant할 일.
Stephen C

답변:


41

이것은 JDK7과 관련된 Maven 컴파일러 플러그인 의 버그 입니다. JDK6에서 잘 작동합니다.


5
maven-compiler-plugin 3.1에서 수정 된 것 같습니다. george-papatheodorou 의 답변을 참조하십시오 .
Jared Beck

30
이것은 해결책이 아닙니다 .. 컴파일 오류는 자바 8에서 여전히 발생합니다.
Eta

Windows 10이 충돌했을 때 시작되었습니다. 그게 요인일까요?
TheRealChx101

1
@Eta (그리고 위의 댓글을 +1 한 27 명 정도)에게-요점을 놓치고 있다고 생각합니다. 이 질문은 Maven의 도움이되지 않는 메시지 에 관한 것 입니다. 이 답변은 컴파일 오류 메시지를 더 유용하게 만드는 방법에 대해 설명합니다. 처음에 컴파일 오류를 일으킨 문제는 수정하지 않습니다. 그 문제는 (일반적으로) 소스 코드에 있습니다! 참조 는 "기호를 찾을 수 없습니다"않거나 오류 평균을 "기호를 확인할 수 없습니다"뭐? .
Stephen C

35

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>

이 플러그인의 최신 버전을 확인하는 가장 좋은 방법은 무엇입니까? 내가 찾을 수있는 것은이 페이지 뿐입니다 : maven.apache.org/plugins/maven-compiler-plugin/… 감사합니다.
자레드 벡

@JaredBeck은 여기에서 찾을 수있는 것 같습니다 : mvnrepository.com/artifact/org.apache.maven.plugins/…
DSimon 19

6

내 경우 문제는 새 클래스를 추가했기 때문에 다시 빌드되지 않은 하위 항아리에 있었으며 해당 하위 항아리의 pom.xml은 실패한 pom.xml과 관련이 없었습니다 ( <parent>태그 사용 ). 그래서 오류가 사라진 후 자식 항아리를 다시 만들었습니다.


이것은 또한 내 문제였습니다. Maven에는 확실히 기존 버그가 있지만 대부분의 경우 Maven 오류 또는 빌드 문제는 이와 같은 시나리오로 설명됩니다.
Michael M

4

나는 같은 문제가 있었다. 그 이유는 Maven 종속성을 통해 두 개의 JAR 파일이 추가되지 않았기 때문에 실행했을 때 mvn compile콘솔에 오류 오류가 표시됩니다.

기호를 찾을 수 없습니다. 클래스 ... ".

그것을 해결하기 위해:

  1. 빌드 경로에서 JAR 파일 제거
  2. 빌드 경로에 추가
  3. 운영 mvn compile

2
빌드 경로에서 JAR 파일을 제거하는 데 사용한 단계를 나열 해 주시겠습니까? 대상 폴더를 삭제하고 maven을 사용하여 다시 컴파일하려고 할 때 동일한 오류가 발생합니까? 감사합니다
turnip424

3

이 문제로 인해 발생합니다. 즉, POM 파일에서 정의한 재 패키징도 마찬가지입니다.

maven 플러그인의 pom 파일에서 이것을 제거하십시오. 작동합니다

<executions>
    <execution>
        <goals>
             <goal>repackage</goal>
        </goals>
    </execution>
</executions>

3

제 경우에는 다음과 같은 범위의 종속성을 사용했습니다. <scope>test</scope> . 이로 인해 개발 시간에 클래스를 사용할 수 있었지만 컴파일 시간에이 메시지를 받았습니다.

<scope>provided</scope>문제 해결을 위해 수업 범위를 돌립니다.


2

Java 7, maven 2.2.1을 사용하고 있고 동일한 오류가 발생하더라도 <scope>tests</scope>pom에서 제거 하고 사용했습니다.

mvn clean -DskipTests=true install 내 maven 버전을 업그레이드하지 않고 내 프로젝트를 성공적으로 빌드합니다.


"mvn clean -DskipTests = true"설치는 마법의 명령입니다! 공유를위한 Thx. (BTW 나는 <scope> tests </ scope>를 건드리지 않았다.)
Eta

1

작업 공간에서 다른 프로젝트에 의존하고 있으며 이러한 프로젝트가 제대로 빌드되지 않으면 이러한 오류가 발생할 수 있습니다. 이러한 종속 프로젝트를 먼저 구축해보십시오.


0

이것은 Maven의 기능이 아닙니다. 컴파일러의 기능입니다. 잘 봐봐; 찾고있는 정보는 다음 줄에있을 가능성이 큽니다.


같은 오류가 발생했습니다. 후속 오류는 프로젝트에서 누락 된 종속성의 이름을 제공했습니다 (이 경우 org.apache.poi.xssf 라이브러리 클래스).
John

0

솔루션 : @ 컴포넌트를 빌드하기 전에 (mvn clean install 사용). 전체 프로젝트를 한 번 빌드하고 구성 요소를 다시 빌드하십시오.

왜 그렇게 :
이 오류가 여러 번 나타납니다. 대부분의 경우 구성 요소 만 빌드하려고합니다 (다른 곳에서는 변경하지 않았으므로).

맞아요,하지만 최근에 다운로드 한 추가 병은 제 3 자 (구성 요소 내부)의 변경 사항에 영향을 받았을 수 있습니다. 전체 프로젝트에 전체 mvn을 새로 설치하면 여러 번 저를 절약했습니다.


-1

내 생각 엔 컴파일러가 잘못된 주석에 대해 불평하고 있습니다. Eclipse가 주석 배열 끝에있는 쉼표와 같은 모든 오류를 표시하지 않는다는 것을 알았습니다. 그러나 표준 javac은 그렇습니다.


불평하는 라인은 fakeThing = new JPanel(). javac가 "fakeThing"을 표시하는 것은 표준 "기호를 찾을 수 없음"오류 일뿐입니다. maven은 그것을 보여주지 않습니다.
mattg

-1

프로젝트에서 Maven 설치를 실행하려고 할 때 Eclipse STS에서 비슷한 문제가 발생했습니다. 해당 프로젝트 및 해당 종속성이 가리키는 프로젝트에 대한 내 pom.xml 파일의 종속성에서 일부 버전을 변경했습니다. 변경 한 모든 프로젝트에서 Maven 설치를 실행 한 다음 원래 프로젝트에서 다시 설치를 실행하여 문제를 해결했습니다.


-1

나는 maven과 같은 문제가 있었다. 내 문제는 maven이 차이점 케이스 이름으로 폴더를 생성하는 것입니다. .service.MyFile을 예상했지만 대상 폴더에서는 Service / MyFile이었고 java는 대소 문자를 구분합니다. 알아내는 데 몇 시간이 걸렸습니다. 확인하는 것이 좋습니다.


-1

일반적으로이 오류는 컴파일 코드의 버전이 작성된 코드의 버전과 다를 때 나타납니다. 예를 들어, 한 클래스에 메소드 A가 있지만 xxx-1.1.0.jar에서 메소드가 B로 변경된 xxx-1.0.0.jar에 의존하는 코드를 작성하십시오. xxx-1.1.0.jar로 코드를 컴파일하면 오류가 표시됩니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.