Безопасно ли использовать новые JDK API в тестовом коде, если производственный код нацелен на более старый JRE? - PullRequest
0 голосов
/ 14 декабря 2018

Я собираю модуль Maven, используя последнюю версию JDK, но нацеливаюсь на JRE 8.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.8.0</version>
    <configuration>
        <release>8</release>
    </configuration>
</plugin>

Поскольку модульные тесты не содержатся в результирующем файле JAR, я предполагаю, что могу использовать API из более новых JDKтакие как методы фабрики сбора из JEP 269 .

Могу ли я сделать это или ожидать каких-либо проблем?


Бонусный вопрос : Могу ли я даже использовать новые функции language , такие как имя типа var из JEP 286 ?Если это так, что было бы необходимо, чтобы убедить Maven скомпилировать тестовый код с другой исходной версией, нежели производственный код?

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

Я всегда предполагал, что компиляция с "-target / -source" обеспечит 100% совместимость моих классов с целевым выпуском Java.

Я ошибся.

В моемcase:

  1. Я использовал Ant / build.xml или Eclipse и Java 1.7 ...

  2. ... для сборки .jarsи .wars, предназначенные для работы на серверах приложений WebSphere, работающих под управлением Java 1.5 или 1.6.

  3. Несмотря на то, что файлы классов имели метку версии, соответствующую цели ...

  4. ... .jar / .war может иногда вносить нежелательные зависимости против более новой версии Java.

  5. Мое решение:

    a) Я сохранил копию "старого JDK" (включая "old" tools.jar, для сборок Ant)

    b) Я написал файл .bat ввыполните сборку, используя старый JDK (мне нужен был файл .bat, потому что Eclipse / Ant отказался работать со старой Java)

Чтобы ответить на ваш вопрос:

  • Это должен работать ...

  • ... но проверить его.

  • Если хочешь "будьте осторожны "- затем сделайте свою фактическую сборку, используя целевую версию (как я сделал).

0 голосов
/ 14 декабря 2018

Как правило, вы хотите, чтобы ваша тестовая среда была настолько похожа на производственную среду, насколько это возможно (и разумно).Если код будет работать на Java 8 JRE в рабочей среде, то вам, вероятно, следует также выполнить свои тесты, чтобы избежать случайного зависания от более новых API.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...