2016-04-04 21 views
7

試圖構建一個alexa(亞馬遜:回聲)技能集。同時,試圖通過匕首2.使用體驗作爲學習測試平臺的依賴注入然而,建築用包的maven-2 CMD:java.lang.IllegalStateException:endPosTable已設置

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

生成具有完整的依賴關係的拉鍊罐子產生以下例外跟蹤:

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

初始編譯發生得很好,並且所有測試都運行併成功執行。我覺得在'連接'事物向南的依賴關係期間是這樣的。請參閱this file以查看構建期間的控制檯輸出。

我的問題是如果值得一試,嘗試使用不同的方式生成依賴關係。對於這個目的我不太瞭解Maven。有沒有補丁或可以使用的東西?你認爲甚至有可能提出解決方法嗎?我希望能夠繼續使用匕首2框架來構建這個項目。

回答

7

這個問題在錯誤報告JDK-8067747描述:

由Jan Lahoda

據我所知,有兩個方面的這個錯誤:

  1. javac錯誤,它崩潰了一個異常。我正在處理這個問題,但請注意,當這個問題得到解決時,javac將不會編譯輸入,它會從Filer中引發一個適當的異常(見下文)。

  2. 什麼看起來像一個maven bug:當項目使用「clean install」編譯時,註釋處理器會將源文件生成到「target/generated-sources/annotations」中。當增量編譯完成時,這個生成的文件作爲輸入傳遞給javac,註釋處理器將嘗試再次生成它,這是不允許的。

這意味着,當Maven的錯誤是固定的,不恰當的異常報告的問題javac的錯誤變得無關緊要。但是,鑑於Maven 2的生命週期的實際日期,我懷疑你可以期望爲它找到修復或修補程序。

+1

從上行家文檔:「該組件的使用方法:裝配,裝配:附接組件:目錄,和組裝:目錄內聯因爲它們會破壞正常的構建過程並促進非標準的構建實踐,所以不推薦使用。「我有一種感覺,一種不同的實用命令可能會解決我遇到的問題。如果我經過它,會發佈一個解決方案。在此期間,你有什麼想法? –

+3

tl; dr - 'mvn clean' – RobEarl

0

我不確定這是否有幫助。對於我的情況,我有與open-jdk8u91相同的問題,我安裝了oracle-jdk,我可以在mvn clean compile之後運行該項目。問題是我必須在每次運行之間切換JDK,並使用maven再次構建它。

編輯:掙扎大約兩天之後,我發現它是mavenjdk之間不匹配的結果。我的IDE使用maven 3.0.5作爲捆綁maven。

解決方案:在你的IDE你應該改變從bundled maven Maven的home目錄到當前的版本,例如/usr/share/maven(對於我當前的版本是3.3.9)

0

我遇到了一個由Maven和JDK 1.8.0_121構建和測試的項目的相同錯誤。在原始配置中,項目首先通過mvn clean進行清潔,然後使用mvn install -projectSpecificParameters進行構建,最後使用單獨的mvn install -otherProjectSpecificParameters進行測試。這種配置導致了問題中提到的錯誤。

在更改階段的順序(第一次測試,然後建立),並將clean目標添加到構建命令以在測試之後清理構建狀態,錯誤不再可再現。

0

this issue解釋的那樣,一個解決方法是禁用useIncrementalCompilation

<plugin> 
    <artifactId>maven-compiler-plugin</artifactId> 

    <configuration> 
     <useIncrementalCompilation>false</useIncrementalCompilation> 
    </configuration> 
</plugin>