ProgramingTip

maven "기호를 제거 할 수 없음"오류가 없습니다.

bestdevel 2020. 11. 5. 08:22
반응형

maven "기호를 제거 할 수 없음"오류가 없습니다.


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

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

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

ant 또는 javac로 빌드하면 실제로 오류 메시지에서 수없는 기호를 알려줍니다. maven은 줄 번호와 문자 위치를 제공하지만 실제 기호를 표시하는 것이 더 도움이 될 것입니다. 오류에 대해 제공되는 유일한 줄입니다. 기호를 제공하는 위 또는 아래에 선이 없습니다. 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"입니다.


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


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>

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


나는 같은 문제가 있었다. 그 이유는 Maven 오류를 통해 두 개의 JAR 파일이 추가로 발생하므로 발생했을 때 mvn compile콘솔에 표시됩니다.

기호를 사용할 수 없습니다. 클래스 ... ".

그것을 해결하기 위해 :

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


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

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


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

maven 파일의 pom 파일에서 제거하십시오. 작동합니다

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

제 경우에는 <scope>test</scope>. 이로 인해 개발 시간에 클래스를 사용할 수 있었지만 시간에 메시지를 예배합니다.

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


이것은 Maven의 기능이 아닙니다. 컴파일러의 기능입니다. 잘 봐봐; 가능성이있을 가능성이 있습니다.


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


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


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


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

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

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


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


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


아마도 IDE 대소 문자 구분 속성을 확인해야 할 것입니다. 나는 같은 문제가 있었고 Idea 대소 문자를 구분하여 해결했습니다 (파일 시스템은 대소 문자를 구분합니다) : https://confluence.jetbrains.com/display/IDEADEV/Filesystem+Case-Sensitivity+Mismatch

참고 URL : https://stackoverflow.com/questions/14164386/maven-cannot-find-symbol-message-unhelpful

반응형