使用 scala 插件在 Intellij/maven 中配置 1.7 时的 Java 6 类

标签 java scala maven intellij-idea scala-maven-plugin

如屏幕截图所示,模块/项目设置为 jdk 1.7

项目/sdk设置为7:

enter image description here

模块设置为 jdk 7:

enter image description here

但是从 javap 我们看到 java6 (50) ??

a) 确认该类刚刚​​编译完毕 (7/22/15 @18:14):

ls -l ./target/classes/org/yardstickframework/spark/DataGenerator.class
-rw-r--r--  1 steve  staff  3829 Jul 22 18:14 ./target/classes/org/yardstickframework/spark/DataGenerator.class

b) 哪个版本的 java?

javap -verbose ./target/classes/org/yardstickframework/spark/DataGenerator.class | grep ver
  minor version: 0
  major version: 50

注意:pom.xml 将语言级别设置为jdk7

        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
            </configuration>
        </plugin>

更新根据建议,我从命令行运行了编译:

mvn clean compile

这也会导致 jdk6/major version=50。为什么会这样呢?我正在检查 POM,看看是否存在其他奇怪的情况。

另一个更新根据 Roman 的请求:这里是 Maven 输出

$mvn -v
Apache Maven 3.1.1 (0728685237757ffbf44136acec0402957f723d9a; 2013-09-17 08:22:22-0700)
Maven home: /usr/local/Cellar/maven/3.1.1/libexec
Java version: 1.7.0_25, vendor: Oracle Corporation
Java home: /Library/Java/JavaVirtualMachines/jdk1.7.0_25.jdk/Contents/Home/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "mac os x", version: "10.10", arch: "x86_64", family: "mac"

另一个更新 ElliottFrisch 建议对 Maven 编译器插件进行一些添加。这是更新的部分:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <fork>true</fork>
                <verbose>true</verbose>
                <source>1.7</source>
                <target>1.7</target>
            </configuration>
        </plugin>

最佳答案

好吧,我对此有点不好意思。这是一个 scala 项目,类文件是 scala-maven 插件的输出。因此,所有这些 maven-compiler 设置仅适用于 java source 文件。对于那些大量失踪的事实真相的人们感到抱歉。

在 scala-maven-plugin 中获取正确版本的方法并不容易确定:但幸运的是有人已经弄清楚了:

http://xflin.blogspot.com/2013/08/mixed-scala-and-java-in-maven-project.html

这里是关键部分:

    <recompileMode>incremental</recompileMode>
    <args>
      <arg>-target:jvm-1.7</arg>
    </args>
    <javacArgs>
      <javacArg>-source</javacArg><javacArg>1.7</javacArg>
      <javacArg>-target</javacArg><javacArg>1.7</javacArg>
    </javacArgs>

这属于正常的 scala-maven-plugin 部分,如下所示:

        <plugin>
            <version>3.2.1</version>
            <groupId>net.alchim31.maven</groupId>
            <artifactId>scala-maven-plugin</artifactId>
            <executions>
                <execution>
                    <goals>
                        <goal>compile</goal>
                        <goal>testCompile</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <scalaCompatVersion>${scala.version}</scalaCompatVersion>
                <scalaVersion>${scala.binary.version}</scalaVersion>
                <jvmArgs>
                    <jvmArg>-Xms512m</jvmArg>
                    <jvmArg>-Xmx1024m</jvmArg>
                </jvmArgs>
              <recompileMode>incremental</recompileMode>
              <args>
                <arg>-target:jvm-1.7</arg>
              </args>
              <javacArgs>
                <javacArg>-source</javacArg><javacArg>1.7</javacArg>
                <javacArg>-target</javacArg><javacArg>1.7</javacArg>
              </javacArgs>
          </configuration>
        </plugin>

将该部分添加到 scala 插件后,我们现在拥有:

$javap -verbose ./target/classes/org/yardstickframework/spark/DataGenerator.class | grep ver
  minor version: 0
  major version: 51

关于使用 scala 插件在 Intellij/maven 中配置 1.7 时的 Java 6 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31576718/

相关文章:

string - 我正在使用 Java 通过在代码中动态生成查询来从 Elasticsearch 中获取一些记录。查询需要一个字符串

私有(private)嵌套类中的 Java 作用域修饰符

java - Java 是否支持和优化尾递归调用?

java - Maven:使用其 ftp 地址在本地存储库中安装 jar

android - 任务 ':bintrayUpload' 执行失败。

java - 使用 Maven 自动验证 JavaDoc

java - 以当前位置为圆心在google map 上画四个圆圈

java - Maven文件夹布局: Should I place tests in the EAR or its sub-modules?

scala - 使用 Scala 读取类路径下的属性文件

scala - null 作为类型参数的实例