aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcelo Vanzin <vanzin@cloudera.com>2016-05-31 16:54:34 -0700
committerMarcelo Vanzin <vanzin@cloudera.com>2016-05-31 16:54:34 -0700
commit57adb77e6b0208dc6d29488a674b6ad78702262f (patch)
tree2de7dfa2f3b62bccc3a8417d1fba69db5cecf24f
parent90b11439b3d4540f48985e87dcc99749f0369287 (diff)
downloadspark-57adb77e6b0208dc6d29488a674b6ad78702262f.tar.gz
spark-57adb77e6b0208dc6d29488a674b6ad78702262f.tar.bz2
spark-57adb77e6b0208dc6d29488a674b6ad78702262f.zip
[SPARK-15451][BUILD] Use jdk7's rt.jar when available.
This helps with preventing jdk8-specific calls being checked in, because PR builders are running the compiler with the wrong settings. If the JAVA_7_HOME env variable is set, assume it points at a jdk7 and use its rt.jar when invoking javac. For zinc, just run it with jdk7, and disable it when building jdk8-specific code. A big note for sbt usage: adding the bootstrap options forces sbt to fork the compiler, and that disables incremental compilation. That means that it's really not convenient to use for normal development, but should be ok for automated builds. Tested with JAVA_HOME=jdk8 and JAVA_7_HOME=jdk7: - mvn + zinc - mvn sans zinc - sbt Verified that in all cases, jdk8-specific library calls fail to compile. Author: Marcelo Vanzin <vanzin@cloudera.com> Closes #13272 from vanzin/SPARK-15451.
-rwxr-xr-xbuild/mvn6
-rw-r--r--external/java8-tests/pom.xml1
-rw-r--r--pom.xml39
-rw-r--r--project/SparkBuild.scala16
4 files changed, 59 insertions, 3 deletions
diff --git a/build/mvn b/build/mvn
index a78b93a685..c3ab62da36 100755
--- a/build/mvn
+++ b/build/mvn
@@ -141,9 +141,13 @@ cd "${_CALLING_DIR}"
# Now that zinc is ensured to be installed, check its status and, if its
# not running or just installed, start it
if [ -n "${ZINC_INSTALL_FLAG}" -o -z "`"${ZINC_BIN}" -status -port ${ZINC_PORT}`" ]; then
+ ZINC_JAVA_HOME=
+ if [ -n "$JAVA_7_HOME" ]; then
+ ZINC_JAVA_HOME="env JAVA_HOME=$JAVA_7_HOME"
+ fi
export ZINC_OPTS=${ZINC_OPTS:-"$_COMPILE_JVM_OPTS"}
"${ZINC_BIN}" -shutdown -port ${ZINC_PORT}
- "${ZINC_BIN}" -start -port ${ZINC_PORT} \
+ $ZINC_JAVA_HOME "${ZINC_BIN}" -start -port ${ZINC_PORT} \
-scala-compiler "${SCALA_COMPILER}" \
-scala-library "${SCALA_LIBRARY}" &>/dev/null
fi
diff --git a/external/java8-tests/pom.xml b/external/java8-tests/pom.xml
index 60e3ff60df..74a3ee1ce1 100644
--- a/external/java8-tests/pom.xml
+++ b/external/java8-tests/pom.xml
@@ -106,6 +106,7 @@
<groupId>net.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
<configuration>
+ <useZincServer>${useZincForJdk8}</useZincServer>
<javacArgs>
<javacArg>-source</javacArg>
<javacArg>1.8</javacArg>
diff --git a/pom.xml b/pom.xml
index fff5560afe..60c8c8dc7a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -184,6 +184,9 @@
<test.java.home>${java.home}</test.java.home>
<test.exclude.tags></test.exclude.tags>
+ <!-- When using different JDKs for the build, we can't use Zinc for the jdk8 part. -->
+ <useZincForJdk8>true</useZincForJdk8>
+
<!-- Package to use when relocating shaded classes. -->
<spark.shade.packageName>org.spark_project</spark.shade.packageName>
@@ -2577,6 +2580,42 @@
</profile>
<profile>
+ <id>java7</id>
+ <activation>
+ <property><name>env.JAVA_7_HOME</name></property>
+ </activation>
+ <properties>
+ <useZincForJdk8>false</useZincForJdk8>
+ </properties>
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <configuration>
+ <compilerArgs combine.children="append">
+ <arg>-bootclasspath</arg>
+ <arg>${env.JAVA_7_HOME}/jre/lib/rt.jar</arg>
+ </compilerArgs>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>net.alchim31.maven</groupId>
+ <artifactId>scala-maven-plugin</artifactId>
+ <configuration>
+ <args combine.children="append">
+ <arg>-javabootclasspath</arg>
+ <arg>${env.JAVA_7_HOME}/jre/lib/rt.jar</arg>
+ </args>
+ </configuration>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+ </profile>
+
+ <profile>
<id>scala-2.11</id>
<activation>
<property><name>!scala-2.10</name></property>
diff --git a/project/SparkBuild.scala b/project/SparkBuild.scala
index f08ca7001f..744f57c517 100644
--- a/project/SparkBuild.scala
+++ b/project/SparkBuild.scala
@@ -277,12 +277,24 @@ object SparkBuild extends PomBuild {
// additional discussion and explanation.
javacOptions in (Compile, compile) ++= Seq(
"-target", javacJVMVersion.value
- ),
+ ) ++ sys.env.get("JAVA_7_HOME").toSeq.flatMap { jdk7 =>
+ if (javacJVMVersion.value == "1.7") {
+ Seq("-bootclasspath", s"$jdk7/jre/lib/rt.jar")
+ } else {
+ Nil
+ }
+ },
scalacOptions in Compile ++= Seq(
s"-target:jvm-${scalacJVMVersion.value}",
"-sourcepath", (baseDirectory in ThisBuild).value.getAbsolutePath // Required for relative source links in scaladoc
- ),
+ ) ++ sys.env.get("JAVA_7_HOME").toSeq.flatMap { jdk7 =>
+ if (javacJVMVersion.value == "1.7") {
+ Seq("-javabootclasspath", s"$jdk7/jre/lib/rt.jar")
+ } else {
+ Nil
+ }
+ },
// Implements -Xfatal-warnings, ignoring deprecation warnings.
// Code snippet taken from https://issues.scala-lang.org/browse/SI-8410.