Почему версия JDK в MANIFEST.MF и файле класса отличается

#java #maven #jenkins #java-8 #java-7

#java #maven #дженкинс #java-8 #java-7

Вопрос:

Я создал свой проект (JDK версии 1.7) с помощью Jenkins (версия 2.164.1 с JDK 1.8)

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

затем я получил файл jar,
когда я распаковываю файл jar и просматриваю MANIFEST.MF

 Build-Jdk:1.8.0_131
  

затем я запускаю

 javap -verbose MyClass.class | grep "major"
major version: 51
  

версия JDK файла класса 1.7

Мой проект должен запускаться с JDK1.7, есть ли проблема с этим?

Комментарии:

1. в нем говорится, что использовался jdk для сборки, 1.8 но 51 сообщает вам, что «это» 1.7 — у вас все в порядке. что вас здесь беспокоит?

2. Я обеспокоен тем, что мой проект, наконец, скомпилирован с JDK1.8, но среда выполнения — JDK1.7, будут проблемы.

3. в общем случае — нет, у вас все должно быть в порядке, в конце концов, вы указываете, что source/target должно быть 1.7 .

4. Вы также должны убедиться, что не используете какой-либо API, представленный в JDK8. Вы должны получить rt.jar из JDK7 и задайте путь к bootclasspath, чтобы указать на него. (Или, на всякий случай, просто скомпилируйте с помощью JDK7)

Ответ №1:

Чтобы добавить комментарий Евгения:

Build-Jdk указывает точную версию JDK, которую вы использовали для компиляции (в вашем случае это 1.8.0_131). Этот JDK может создавать код с различными уровнями совместимости. Эти уровни настраиваются в maven-compiler-plugin. Итак, вы создаете совместимый с Java 1.7 код с Java 1.8, который, вероятно, именно то, что вы хотите.

Вы можете спросить, для чего предназначена Build-Jdk версия: это поможет вам отследить проблемы, которые могут возникнуть из-за ошибок в JDK или других несовместимостей.

Комментарии:

1. Я понимаю, но у меня есть беспокойство. Я уже компилировал с JDK1.7 раньше. Теперь, если я использую JDK1.8 для компиляции проекта 1.7, возникнет ли проблема во время выполнения в JDK1.7? Большое вам спасибо 🙂

2. Скорее всего, нет. Никто не может сказать, что ошибок нет, но это маловероятно.