Can';在Ubuntu 16.04上编译java
由于我升级到新安装的Ubuntu 16.04,我无法使用任何已安装的JDK编译Java项目,例如:Can';在Ubuntu 16.04上编译java,java,maven,ubuntu,ubuntu-16.04,Java,Maven,Ubuntu,Ubuntu 16.04,由于我升级到新安装的Ubuntu 16.04,我无法使用任何已安装的JDK编译Java项目,例如: $ sudo update-alternatives --config java There are 4 choices for the alternative java (providing /usr/bin/java). Selection Path Priority Status -
$ sudo update-alternatives --config java
There are 4 choices for the alternative java (providing /usr/bin/java).
Selection Path Priority Status
------------------------------------------------------------
0 /usr/lib/jvm/java-8-oracle/jre/bin/java 1082 auto mode
1 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java 1081 manual mode
2 /usr/lib/jvm/java-8-oracle/jre/bin/java 1082 manual mode
* 3 /usr/lib/jvm/jdk1.8.0_65/bin/java 100 manual mode
4 /usr/lib/jvm/jdk1.8.0_92/bin/java 100 manual mode
编译我的maven项目:
$ mvn clean install -DskipTests
...
[INFO] --- maven-compiler-plugin:3.2:compile (default-compile) @
dearjohn ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 101 source files to /home/ariel/workspace/dearjohn/target/classes
An exception has occurred in the compiler (1.8.0_65). 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)
at org.codehaus.plexus.compiler.javac.JavaxToolsCompiler.compileInProcess(JavaxToolsCompiler.java:125)
at org.codehaus.plexus.compiler.javac.JavacCompiler.performCompile(JavacCompiler.java:169)
at org.apache.maven.plugin.compiler.AbstractCompilerMojo.execute(AbstractCompilerMojo.java:823)
at org.apache.maven.plugin.compiler.CompilerMojo.execute(CompilerMojo.java:129)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:207)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
at org.apache.maven.lifecycle.internal.MojoExecutor.executeForkedExecutions(MojoExecutor.java:352)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:197)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106)
at org.apache.maven.cli.MavenCli.execute(MavenCli.java:863)
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:288)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:199)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] An unknown compilation problem occurred
[INFO] 1 error
[INFO] -------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
$mvn干净安装-DskipTests
...
[信息]---maven编译器插件:3.2:compile(默认编译)@
亲爱的约翰---
[信息]检测到更改-重新编译模块!
[信息]将101个源文件编译到/home/ariel/workspace/dearjohn/target/classes
编译器(1.8.0_65)中发生异常。请在Java bug数据库中提交一个bug(http://bugreport.java.com/bugreport/)在检查数据库是否存在重复项之后。在报告中包括您的程序和以下诊断。非常感谢。
java.lang.IllegalStateException:已设置endPosTable
位于com.sun.tools.javac.util.DiagnosticSource.setEndPosTable(DiagnosticSource.java:136)
位于com.sun.tools.javac.util.Log.setEndPosTable(Log.java:350)
位于com.sun.tools.javac.main.JavaCompiler.parse(JavaCompiler.java:667)
位于com.sun.tools.javac.main.JavaCompiler.parseFiles(JavaCompiler.java:950)
位于com.sun.tools.javac.processing.JavacProcessingEnvironment$Round(JavacProcessingEnvironment.java:892)
位于com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.next(JavacProcessingEnvironment.java:921)
位于com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1187)
位于com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1170)
位于com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:856)
位于com.sun.tools.javac.main.main.compile(main.java:523)
位于com.sun.tools.javac.api.javactasquimpl.doCall(javactasquimpl.java:129)
位于com.sun.tools.javac.api.javactasquimpl.call(javactasquimpl.java:138)
位于org.codehaus.plexus.compiler.javac.JavaxToolsCompiler.compileInProcess(JavaxToolsCompiler.java:125)
位于org.codehaus.plexus.compiler.javac.JavacCompiler.performCompile(JavacCompiler.java:169)
位于org.apache.maven.plugin.compiler.AbstractCompilerMojo.execute(AbstractCompilerMojo.java:823)
位于org.apache.maven.plugin.compiler.CompilerMojo.execute(CompilerMojo.java:129)
位于org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
位于org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:207)
位于org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
位于org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
位于org.apache.maven.lifecycle.internal.MojoExecutor.executeforkeredexecutions(MojoExecutor.java:352)
位于org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:197)
位于org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
位于org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
位于org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)
位于org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)
位于org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
位于org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
在org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307)
在org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193)
位于org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106)
位于org.apache.maven.cli.MavenCli.execute(MavenCli.java:863)
位于org.apache.maven.cli.MavenCli.doMain(MavenCli.java:288)
位于org.apache.maven.cli.MavenCli.main(MavenCli.java:199)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中
位于java.lang.reflect.Method.invoke(Method.java:497)
位于org.codehaus.plexus.classworlds.launcher.launcher.launchEnhanced(launcher.java:289)
位于org.codehaus.plexus.classworlds.launcher.launcher.launch(launcher.java:229)
位于org.codehaus.plexus.classworlds.launcher.launcher.mainWithExitCode(launcher.java:415)
位于org.codehaus.plexus.classworlds.launcher.launcher.main(launcher.java:356)
[信息]-------------------------------------------------------------
[错误]编译错误:
[信息]-------------------------------------------------------------
[错误]发生未知的编译问题
[INFO]1错误
[信息]-------------------------------------------------------------
[信息]------------------------------------------------------------------------
[信息]生成失败
[信息]------------------------------------------------------------------------
我安装的其他Java版本也会出现同样的错误。
使用Maven 3.3.9
在使用Ubuntu 12.04和java build 1.8.0_91-8u91-b14-0ubuntu4~12.04-b14的远程设备上尝试过,没有编译错误。使用java 1.8.0_91-8u91-b14-3ubuntu1~16.04.1-b14在我的16.04上尝试了最接近的方法,得到了与上面相同的错误
mvn编译传递会导致不同阶段的故障,但mvn包会导致错误。这是maven编译器插件3.2和3.3版本中的一个错误
<dependency>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.5.1</version>
</dependency>
第二次运行“mvn包”时,先前生成的源目录会在生成源阶段之前添加到源路径,并导致此解析器异常
例如,切换回较旧的版本3.2,maven编译器插件修复了这个问题
注意,增量编译在maven编译器插件的3.0和3.1版本中被破坏。因此,我更喜欢切换maven编译器插件的2.5.1版本
<dependency>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.5.1</version>
</dependency>
org.apache.maven.plugins
maven编译器plu