Eclipse m2e не поддерживает тестовую флягу Maven с модулями JPMS - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть проект 'java11-core', который генерирует тестовый jar-артефакт для совместного использования с проектом 'java11-app'. Эти проекты прекрасно работают с командной строкой Maven, но в Eclipse классы, общие для тестового jar, не найдены.

Информация о версии:

  • Apache Maven 3.6.0 (командная строка и Eclipse)
  • Java-версия: 11.0.1, поставщик: Oracle Corporation
  • Eclipse IDE: Версия: 2018-09 (4.9.0)
  • Плагин M2E: 1.9.1.20180912-1601

Первоначально я создавал их для проектов как традиционные не JPMS проекты. Эти проекты компилировались и запускали тесты как обычно. После того, как я добавил module-info.java и в java11-core, и в java11-app, компилятор Eclipse не смог распознать общие тестовые файлы из основного проекта.

Вот снимок проводника пакетов для обзора структуры проекта.

enter image description here

Добавленное содержимое java11-app и java11-core module-info соответственно:

module com.java11.app {

    exports com.java11.app;
    requires com.java11.core;
}

module com.java11.core {

    exports com.java11.core;
}

Как видите, я не экспортирую пакет тестовых утилит из com.java11.core. Я не хочу экспортировать тестовые пакеты, потому что это сделало бы тестовые классы общедоступными. Я также не хочу представлять новый тестовый проект, поскольку в реальных сценариях очень вероятно, что это потребует циклических зависимостей между тестовыми утилитами и проектами, которые они помогают в тестировании.

enter image description here

Ошибки сборки для в AppTest.java. Интересным является сбой, о котором сообщает Eclipse: он не утверждает, что не может найти класс CoreTestUtil, а скорее:

The type com.java11.test.core.util.CoreTestUtil is not accessible   AppTest.java    /java11-app/src/test/java/com/java11/app    line 8  Java Problem
CoreTestUtil cannot be resolved                                     AppTest.java    /java11-app/src/test/java/com/java11/app    line 21 Java Problem

Я предполагаю, что отсутствие экспорта для этого пакета из java11-core и / или отсутствие требования для этого пакета в java11-app заставляют eclipse полагать, что доступ ограничен, даже если классы существуют в отдельном тест-банка.

Путь к модулю для java11-приложения показывает, что он включает в себя java11-core в качестве модуля, а Без тестового кода имеет значение Нет .

enter image description here

Я знаю, что работаю с недавно выпущенными функциями и подозреваю, что совместное использование тестовых классов в проекте Eclipse JPMS еще не поддерживается. Но я не уверен, где искать (Eclipse? M2E плагин) для обновления на него поддерживается. Я также не знаю обходного пути, который позволил бы мне работать продуктивно при внедрении JPMS для моих программных проектов.

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

Этот предмет был охарактеризован как вопрос передового опыта, который должен быть решен путем рефакторинга тестовых утилит в отдельный модуль. Я уважаю эту точку зрения, но, пытаясь следовать этому руководству, я вынужден был нарушать другие передовые практики, включая DRY (не повторяй себя) и циклические зависимости между пакетами.

Обычно тестовая утилита возникает при разработке модуля, который помогает эффективно тестировать этот модуль, а также зависит от этого модуля. Это создает цикл, если эти утилиты извлекаются в отдельный модуль. Кроме того, некоторые из этих утилит могут быть одинаково полезны при тестировании других модулей, которые зависят от этого модуля. Это создает дублированный код, если эти утилиты копируются в новый тестовый модуль для зависимых. Возможно, именно по этой причине изначально была добавлена ​​поддержка Maven 'test-jar'.

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