compiler-errors - support - java dagger




java.lang.IllegalStateException:endPosTable가 이미 설정되어 있습니다. (3)

alexa (아마존 : 에코) 기술을 세우려고합니다. 동시에,이 경험을 단검 2를 통한 의존성 주입을위한 학습 테스트 베드로 사용하려고 시도합니다. 그러나 maven-2 cmd를 사용하여 패키지를 빌드하는 경우 :

mvn assembly:assembly -DdescriptorId=jar-with-dependencies package'. 

완전한 종속성을 가진 zip jar를 생성하면 다음 예외 추적이 생성됩니다.

[INFO] ------------------------------------------------------------------------
[INFO] Building Echo Device Client 1.0
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ echo-device-client ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory /Users/apil.tamang/Dropbox/Git/echo-device-client/src/main/resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.3:compile (default-compile) @ echo-device-client ---
[INFO] Changes detected - recompiling the module!
[WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent!
[INFO] Compiling 46 source files to /Users/apil.tamang/Dropbox/Git/echo-device-client/target/classes
An exception has occurred in the compiler (1.8.0_60). Please file a bug at the Java Bug Database (http://bugreport.java.com/bugreport/) after checking the database for duplicates. Include your program and the following diagnostic in your report.  Thank you.
java.lang.IllegalStateException: endPosTable already set
        at com.sun.tools.javac.util.DiagnosticSource.setEndPosTable(DiagnosticSource.java:136)
        at com.sun.tools.javac.util.Log.setEndPosTable(Log.java:350)
        at com.sun.tools.javac.main.JavaCompiler.parse(JavaCompiler.java:667)
        at com.sun.tools.javac.main.JavaCompiler.parseFiles(JavaCompiler.java:950)
        at com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.<init>(JavacProcessingEnvironment.java:892)
        at com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.next(JavacProcessingEnvironment.java:921)
        at com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1187)
        at com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1170)
        at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:856)
        at com.sun.tools.javac.main.Main.compile(Main.java:523)
        at com.sun.tools.javac.api.JavacTaskImpl.doCall(JavacTaskImpl.java:129)
        at com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:138)

초기 컴파일이 제대로 수행되고 모든 테스트가 실행되고 성공적으로 실행됩니다. 나는 그것들이 남쪽으로가는 의존성을 '연결'하는 동안있는 것처럼 느낍니다. 빌드하는 동안 콘솔 출력을 보려면 이 파일 을 살펴보십시오.

제 질문은 다른 방법을 사용하여 종속성을 생성 해 볼만한 가치가 있는지입니다. 나는 그 목적을 위해 maven에 대해 많이 모른다. 사용할 수있는 패치 나 그 밖의 것이 있습니까? 해결 방법을 제시하는 것이 가능하다고 생각하십니까? 이 프로젝트를 구축하기 위해 대거 2 프레임 워크를 계속 사용할 수 있기를 바랍니다.


Maven 및 JDK 1.8.0_121에서 빌드하고 테스트 한 프로젝트에서 동일한 오류가 발생했습니다. 원래 구성에서 프로젝트는 먼저 mvn clean 통해 mvn clean 다음 mvn install -projectSpecificParameters 사용하여 빌드되고 마지막으로 별도의 mvn install -otherProjectSpecificParameters 테스트되었습니다. 이 구성은 질문에서 언급 한 오류가 발생했습니다.

스테이지의 순서를 변경 한 후 (첫 번째 테스트 및 빌드) 테스트를 완료 한 후에 빌드 명령을 정리하는 데 clean 목표를 추가하면 오류가 더 이상 재현되지 않습니다.


이 문제는 버그 보고서 JDK-8067747 설명되어 있습니다.

( 얀 라 호다 바이 )

필자가 아는 한이 버그에는 두 가지 측면이 있습니다.

  1. javac 버그로 인해 예외가 발생합니다. 나는이 일을하고 있지만, javac가 고정되어있을 때 javac가 입력을 컴파일하지 않을 것이므로, Filer로부터 적절한 예외를 던질 것입니다 (아래 참조).

  2. 메이븐 버그로 보이는 것 : 프로젝트가 "새로 설치"로 컴파일 될 때, 주석 프로세서는 "target / generated-sources / annotations"에 소스 파일을 생성합니다. 증 분식 컴파일이 완료되면이 생성 된 파일이 javac에 입력으로 전달되고 주석 처리기에서 다시 생성하려고 시도하지만 허용되지 않습니다.

이것은, Maven 버그가 수정되었을 때, 부적당 한 예외로 문제를보고하는 javac 의 버그가 무의미해진다는 것을 의미합니다. 그러나 Maven 2의 실제 종료일을 고려할 때, 패치 나 패치를 찾을 수 있을지는 의문입니다.








dagger-2