programing

@Override 주석에서 javac가 실패하는 이유

projobs 2021. 1. 18. 07:31
반응형

@Override 주석에서 javac가 실패하는 이유


Eclipse는 인터페이스의 메소드를 구현할 때 @Override 주석을 추가합니다. Eclipse는 이것에 문제가없는 것 같습니다. 그리고 Cruise Control의 자동화 된 빌드 프로세스는 이것에 문제가없는 것 같습니다. 그러나 명령 줄에서 빌드하고 ant가 javac를 실행하는 경우 다음 오류가 발생합니다.

[javac] C:\path\project\src\com\us\MyClass.java:70: method does not override a method from its superclass
[javac]     @Override
[javac]      ^
[javac] 1 error

Eclipse는 Java 1.6에서 실행됩니다. Cruise Control은 Java 1.5를 실행 중입니다. 내가 사용하는 Java 버전에 관계없이 내 개미 빌드가 실패합니다.


@Override주석 사양은 자바 1.6에서 변경. Java 1.5에서 컴파일러는 @Override구현 된 인터페이스 메소드에 대한 주석을 허용하지 않았지만 1.6에서는 허용했습니다. 내가 찾은 첫 번째 검색 결과는 여기에 블로그 게시물입니다. . 그것은 잘 설명하지 않은 , 그러나 그것은 변화를했다.

Eclipse가 1.6 준수로 설정되어 있기 때문에 Eclipse가 추가합니다. 동일한 버전의 Java에서 빌드 및 Eclipse 환경을 유지해야합니다. Cruise Control이 별도의 JDK6을 사용하여 컴파일하는지 여부에 대해 Java 5를 실행하고 있는지 여부는 명확하지 않습니다.

위의 1.5 대 1.6 @Override주석 규칙 과는 별도로 Eclipse에는 자체 컴파일러 구현 (아님 javac)이 있으며 때때로 다른 동작이 있음을 기억하십시오. Eclipse에서 어떤 것이 컴파일되지만 Ant 또는 Maven이 아닐 때마다 두 컴파일러를 모두 만족시킬 수있는 방법을 찾아야합니다.

다음은 Eclipse에서 컴파일러를 변경하는 스크린 샷입니다.


정말 문제가 당신에게있는 거 보는을 설명 할 수 있지만 사실과 관련이있을 것으로 보인다 JDK 5가 허용하지 않습니다 @Override의 구현 방법에 인터페이스를 오버라이드 (override) 방법은 존재 만에, 상위 클래스 .

JDK 6@Override이들 중 하나 를 허용 합니다.

개미 빌드가 실패하면 source매개 변수를 javac에 전달하여 JDK 5 준수를 요청할 수 있습니다 .


@Override가 메소드 구현의 컨텍스트에서 사용될 때 javac에 의해 "왜"오류가 발생하는지 질문에 대한 직접적인 대답은 실제로 Java 사양에 있습니다.

"이의 이론적 근거는 인터페이스를 구현하는 구체적인 클래스가 @Override 주석에 관계없이 반드시 모든 인터페이스의 메서드를 재정의하므로이 주석의 의미가 인터페이스 구현 규칙과 상호 작용하는 것이 혼란 스러울 것입니다."

http://java.sun.com/docs/books/jls/third_edition/html/interfaces.html#9.6.1.4 참조

하지만 누군가가 java 1.6 및 1.5 u21에 대한 마음을 바꿨습니다.


@Override구현 된 메소드에 대한 태그는 Java 1.6의 새로운 기능입니다. Java 1.5에서는 @Override기본 클래스에서 메서드를 재정의 할 때만 정확합니다. 여기여기에서 더 많은 것을 읽으 십시오 .


저를 포함한 많은 사람들이 이로 인해 체포되었습니다. 더 큰 SO 토론을 보려면 여기를 참조하십시오.


Eclipse는 1.5가 아닌 1.6 버전의 Java를 가리 킵니다. Eclipse에서 Java 버전을 구성 하려면 여기참조하십시오 .


해당 인터페이스에 대한 정의가 하나만 있는지 확인하십시오.

예 : HttpServletRequest

공급자에 따라 사양이 다른 인터페이스입니다.

pax-web-jetty와 apache-felix-jetty를 비교합니다. 그들은 다른 방법을 가지고 있습니다.


ANT로 프로젝트를 만들 때도 같은 문제가 발생했습니다. 문제에 대한 해결책은 build.properties 파일 내에서 다음 속성을 변경하는 것입니다.

javac.compiler=org.eclipse.jdt.core.JDTCompilerAdapter

에:

javac.compiler=modern

그것은 문제를 해결했고 프로젝트는 성공적으로 컴파일되고 배포되었습니다.

참조 URL : https://stackoverflow.com/questions/2335655/why-is-javac-failing-on-override-annotation

반응형