Классы Java 6 при настройке 1.7 в Intellij/maven с плагином scala

Как видно на скриншоте, модуль / проект настроен на jdk 1.7

Проект / SDK установлен на 7:

введите описание изображения здесь

Модуль установлен на JDK 7:

введите описание изображения здесь

Однако из javap мы видим java6 (50)??

а) Убедитесь, что класс был только что скомпилирован (22.07.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

б) Какая версия Java?

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

Примечание: pom.xml устанавливает уровень языка в jdk 7

        <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, чтобы увидеть, есть ли другие странности.

Еще одно обновление По запросу Романа: вот выход 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>

1 ответ

Решение

ОК, я немного застенчив в этом. Это проект Scala, а файлы классов являются выходными данными из плагина Scala-Maven. Таким образом, все эти настройки компилятора maven применяются только к исходным файлам Java. Извините за этих огромных пропавших фактоидов.

Способ получить правильную версию в 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>
            <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
Другие вопросы по тегам