【问题标题】:Can't compile java on Ubuntu 16.04无法在 Ubuntu 16.04 上编译 java
【发布时间】:2016-12-17 11:52:01
【问题描述】:

由于我升级到全新安装的 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
------------------------------------------------------------
  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] ------------------------------------------------------------------------

我安装的其他 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 compile 会导致不同阶段的细分,但 mvn package 会导致错误。

【问题讨论】:

  • 似乎与stackoverflow.com/questions/36408706/… 相关,您检查过 jdk7 或更低版本吗?
  • 我的项目使用了一些 Java 8 特性,所以这是不可能的......
  • 可能是升级搞砸了您的环境变量。检查 maven 是否使用您喜欢的 java 版本。您的 Maven 使用版本 1.8.0_65。终端返回的“java -version”是什么?
  • Same:$ java -version java version "1.8.0_65" Java(TM) SE Runtime Environment (build 1.8.0_65-b17) Java HotSpot(TM) 64-Bit Server VM (build 25.65- b01,混合模式)
  • “通过 mvn compile 会导致不同阶段的细分,但 mvn package 会导致错误。”因此,这更多的是升级后的 mvn 构建失败,而不是无法“在 Ubuntu 16.04 上编译 java”(如您的标题所示)。修复标题以指示/包含 maven 可能会获得更多相关受众。如果我得到一些想法或提示,我会稍后再谈。

标签: java maven ubuntu ubuntu-16.04


【解决方案1】:

这是 maven-compiler-plugin 的 3.2 和 3.3 版本中的一个错误。

第二次运行'mvn package'时,之前生成的源码目录在generate-source阶段之前被添加到源码路径中,导致这个解析器异常。

以 maven-compiler-plugin 为例,切换回较旧的 3.2 版 即可解决此问题。

请注意,增量编译在 maven-compiler-plugin 的 3.0 和 3.1 版本中被破坏。所以,我更喜欢切换 2.5.1 版本的 maven-compiler-plugin。

<dependency>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>2.5.1</version>
</dependency>

【讨论】:

猜你喜欢
  • 2016-10-13
  • 2013-07-18
  • 1970-01-01
  • 1970-01-01
  • 2016-10-14
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
  • 2018-06-09
相关资源
最近更新 更多