2016-04-04 23 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>