事象
herokuのjavaアプリケーションをgit push heroku master
でデプロイする際に、mavenのjavaのコンパイラが-source 1.5
となり、ラムダ式を受け付けてくれなくなることがあったので、その対処方法をメモ
remote: [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ helloworld ---
remote: [INFO]
remote: [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ helloworld ---
remote: [INFO] Using 'UTF-8' encoding to copy filtered resources.
remote: [INFO] Copying 1 resource
remote: [INFO]
remote: [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ helloworld ---
remote: [INFO] Changes detected - recompiling the module!
remote: [INFO] Compiling 20 source files to /tmp/build_87cf46c0b2782adde23c08b558684ff6/target/classes
remote: [INFO] -------------------------------------------------------------
remote: [ERROR] COMPILATION ERROR :
remote: [INFO] -------------------------------------------------------------
remote: [ERROR] /tmp/build_87cf46c0b2782adde23c08b558684ff6/src/main/java/xxxxxxxx/XxxxxYyyyyZzzzz.java:[60,42] lambda expressions are not supported in -source 1.5 ← ここでラムダ式を使ったソースがエラー
remote: (use -source 8 or higher to enable lambda expressions)
remote: [INFO] 1 error
remote: [INFO] -------------------------------------------------------------
remote: [INFO] ------------------------------------------------------------------------
remote: [INFO] BUILD FAILURE
remote: [INFO] ------------------------------------------------------------------------
remote: [INFO] Total time: 12.493 s
remote: [INFO] Finished at: 2015-05-06T11:54:00+00:00
remote: [INFO] Final Memory: 16M/418M
remote: [INFO] ------------------------------------------------------------------------
remote: [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project helloworld: Compilation failure
remote: [ERROR] /tmp/build_87cf46c0b2782adde23c08b558684ff6/src/main/java/xxxxxxxx/XxxxxYyyyyZzzzz.java:[60,42] lambda expressions are not supported in -source 1.5
remote: [ERROR] (use -source 8 or higher to enable lambda expressions)
remote: [ERROR] -> [Help 1]
remote: [ERROR]
remote: [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
remote: [ERROR] Re-run Maven using the -X switch to enable full debug logging.
remote: [ERROR]
remote: [ERROR] For more information about the errors and possible solutions, please read the following articles:
remote: [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
remote:
remote: ! ERROR: Failed to build app with Maven
remote: We're sorry this build is failing! If you can't find the issue in application code,
remote: please submit a ticket so we can help: https://help.heroku.com/
remote:
remote:
remote: ! Push rejected, failed to compile Java app
remote:
remote: Verifying deploy....
remote:
remote: ! Push rejected to dry-bayou-9999.
remote:
To https://git.heroku.com/dry-bayou-9999.git
! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'https://git.heroku.com/dry-bayou-9999.git'
原因
コンパイル時にjavaのversionで1.5が指定されて、ラムダ式が認識されないようだ。
(1.5というのは古すぎるような)
対応方法
mavenのpom.xmlに以下を追加
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
または、
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
参考
How to change Java version for Maven in IntelliJ?
MavenでJava8のプロジェクトを作る
感想
IntelliJだとこの辺りを微妙に吸収してくれていたようなので、あんまり気づかなかった。