Christian Kadner created BAHIR-139:
--------------------------------------

             Summary: Scala-maven-plugin does not respect Java compile level
                 Key: BAHIR-139
                 URL: https://issues.apache.org/jira/browse/BAHIR-139
             Project: Bahir
          Issue Type: Bug
          Components: Build
    Affects Versions: Spark-2.2.0
         Environment: OpenJDK Runtime Environment (build 
1.8.0_111-8u111-b14-2ubuntu0.16.04.2-b14)
OpenJDK 64-Bit Server VM (build 25.111-b14, mixed mode)
            Reporter: Christian Kadner
            Assignee: Christian Kadner
             Fix For: Spark-2.2.1


While working on PR [#28|https://github.com/apache/bahir/pull/28] we found that 
the 
[scala-maven-plugin|https://mvnrepository.com/artifact/net.alchim31.maven/scala-maven-plugin/3.2.2]
 does not respect the Java version ({{<java.version>1.8</java.version>}}) as 
configured by Java compile arguments {{-source}} and {{-target}}.


*[Bahir Scala-Maven-Plugin 
Configuration|https://github.com/apache/bahir/blob/3204f34aae679dd95c7fa5bdc9071fb2f4e52c16/pom.xml#L532]:*
{code:xml|title=pom.xml}
        <plugin>
          <groupId>net.alchim31.maven</groupId>
          <artifactId>scala-maven-plugin</artifactId>
          <version>3.2.2</version>
          ...
          <configuration>
            <scalaVersion>${scala.version}</scalaVersion>
            <recompileMode>incremental</recompileMode>
            <useZincServer>true</useZincServer>
            ...
            <javacArgs>
              <javacArg>-source</javacArg>
              <javacArg>${java.version}</javacArg>
              <javacArg>-target</javacArg>
              <javacArg>${java.version}</javacArg>
              <javacArg>-Xlint:all,-serial,-path</javacArg>
            </javacArgs>
          </configuration>
{code}


*Compile PR #28:*
{code}
[bahir_pr28]$ mvn scala:compile -pl datasource-webhdfs
{code}


*Compile Errors:*
{code}
...
[ERROR] warning: [options] bootstrap class path not set in conjunction with 
-source 1.6

[ERROR] 
datasource-webhdfs/src/main/java/org/apache/hadoop/hdfs/web/WebHdfsFileSystem.java:286:
 error: diamond operator is not supported in -source 1.6
[ERROR]       this.restCsrfMethodsToIgnore = new HashSet<>();
[ERROR]                                                  ^
[ERROR]   (use -source 7 or higher to enable diamond operator)

[ERROR] 
datasource-webhdfs/src/main/java/org/apache/hadoop/hdfs/web/WebHdfsFileSystem.java:773:
 error: multi-catch statement is not supported in -source 1.6
[ERROR]           } catch (NoSuchMethodException | SecurityException 
[ERROR]                                          ^
[ERROR]   (use -source 7 or higher to enable multi-catch statement)

[ERROR] 2 errors
[ERROR] 1 warning
...
{code}


*Maven DEBUG Output:*

{code:title=mvn -X compile -pl datasource-webhdfs}
...
[INFO] --- scala-maven-plugin:3.2.2:compile (scala-compile-first) @ 
spark-datasource-webhdfs_2.11 ---
[DEBUG] Configuring mojo net.alchim31.maven:scala-maven-plugin:3.2.2:compile 
from plugin realm 
ClassRealm[plugin>net.alchim31.maven:scala-maven-plugin:3.2.2, parent: 
sun.misc.Launcher$AppClassLoader@74a14482]
[DEBUG] Configuring mojo 'net.alchim31.maven:scala-maven-plugin:3.2.2:compile' 
with basic configurator -->
[DEBUG]   (f) analysisCacheFile = 
/projects/bahir_pr28/datasource-webhdfs/target/analysis/compile
[DEBUG]   (f) args = [-unchecked, -deprecation, -feature]
[DEBUG]   (f) checkMultipleScalaVersions = true
[DEBUG]   (f) compileOrder = mixed
[DEBUG]   (f) displayCmd = false
[DEBUG]   (f) encoding = UTF-8
[DEBUG]   (f) failOnMultipleScalaVersions = false
[DEBUG]   (f) forceUseArgFile = false
[DEBUG]   (f) fork = true
[DEBUG]   (f) javacArgs = [-source, 1.8, -target, 1.8, -Xlint:all,-serial,-path]
[DEBUG]   (f) javacGenerateDebugSymbols = true
[DEBUG]   (f) jvmArgs = [-Xms1024m, -Xmx1024m, -XX:ReservedCodeCacheSize=512m]
[DEBUG]   (f) notifyCompilation = true
[DEBUG]   (f) outputDir = 
/projects/bahir_pr28/datasource-webhdfs/target/scala-2.11/classes
[DEBUG]   (f) pluginArtifacts = 
[net.alchim31.maven:scala-maven-plugin:maven-plugin:3.2.2:,...
[DEBUG]   (f) recompileMode = incremental
[DEBUG]   (f) scalaClassName = scala.tools.nsc.Main
[DEBUG]   (f) scalaOrganization = org.scala-lang
[DEBUG]   (f) scalaVersion = 2.11.8
[DEBUG]   (f) sendJavaToScalac = true
[DEBUG]   (f) session = org.apache.maven.execution.MavenSession@7a6ebe1e
[DEBUG]   (f) source = 1.6
[DEBUG]   (f) sourceDir = 
/projects/bahir_pr28/datasource-webhdfs/src/main/java/../scala
[DEBUG]   (f) target = 1.6
[DEBUG]   (f) useCanonicalPath = true
[DEBUG]   (f) useZincServer = true
[DEBUG]   (f) zincPort = 3030
[DEBUG] -- end configuration --
...
{code}

*Notice:*
{code}
[DEBUG]   (f) javacArgs = [-source, 1.8, -target, 1.8, -Xlint:all,-serial,-path]
[DEBUG]   (f) source = 1.6
[DEBUG]   (f) target = 1.6
{code}
Apparently the compile version defaults to Java 1.6 when the 
[{{source}}|http://davidb.github.io/scala-maven-plugin/compile-mojo.html#source]
 and 
[{{target}}|http://davidb.github.io/scala-maven-plugin/compile-mojo.html#target]
 elements are not explicitly set as part of the scala-maven-plugin 
{{<configuration>}}.


*Proposed Fix:*

Add the {{<source>}} and {{<target>}} elements to the scala-maven-plugin 
{{<configuration>}}:
{code:xml}
            <source>${java.version}</source>
            <target>${java.version}</target>
{code}


{code:xml|title=pom.xml}
        <plugin>
          <groupId>net.alchim31.maven</groupId>
          <artifactId>scala-maven-plugin</artifactId>
          <version>3.2.2</version>
          ...
          <configuration>
            <scalaVersion>${scala.version}</scalaVersion>
            <recompileMode>incremental</recompileMode>
            <useZincServer>true</useZincServer>
            ...
            <source>${java.version}</source>
            <target>${java.version}</target>
            <javacArgs>
              <javacArg>-source</javacArg>
              <javacArg>${java.version}</javacArg>
              <javacArg>-target</javacArg>
              <javacArg>${java.version}</javacArg>
              <javacArg>-Xlint:all,-serial,-path</javacArg>
            </javacArgs>
          </configuration>
{code}




--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to