Плагин java-test-fixtures несовместим с параметром "Сборка и запуск" с использованием настройки IntelliJ IDEA?

Похоже, что если я использую плагин java-test-fixtures в моем проекте java Gradle, когда IntelliJ импортирует его, IDE всегда будет отмечать src/testFixtures dir в качестве исходной папки (отображается в настройках модуля на вкладке "Источники").

Тем не менее, любые зависимости, которые я добавил в свой build.gradle к testFixturesApi или testFixturesImplementation конфигурации импортируются в проект IDEA с объемом Test (отображается в настройках модуля на вкладке "Зависимости").

Поэтому, когда я собираюсь создать свой проект, используя сборку проекта и запускаю, используя настройку IntelliJ IDEA вместо значения по умолчанию Gradle (отображается в Настройках -> Сборка, Выполнение, Развертывание -> Инструменты сборки -> Gradle), построитель не может найти зависимости от этих конфигураций testFixtures, и я получаю кучу ошибок пакета не существует.

Такое поведение можно легко воспроизвести после настройки нового java-library проект с использованием gradle init wizard и добавив к нему плагин java-test-fixtures, затем добавив dep к одной из конфигураций тестовых фикстур и импортировав его в файл java в SourceSet тестовых фикстур, затем переключив настройку Build and run и нажав build.

Я использую Gradle 6.0 и IntelliJ 2019.3 BETA.

Я пробовал явно пометить исходный каталог testFixtures как папку Test Source:

idea {
    module {
        testSourceDirs += project.sourceSets.testFixtures.allJava.srcDirs
    }
}

Но импорт IDEA Gradle, похоже, не учитывает это, и я подозреваю, что это неправильное решение.

Есть ли способ заставить плагин java-test-fixtures хорошо работать с конструктором IDEA без утечки моих данных из testFixturesApi конфигурация в api конфигурация?

ОБНОВИТЬ

Итак, моя команда включила параметр "gradle.settings.showDeprecatedSettings" в реестре IntelliJ и в настоящее время НЕ использует рекомендованный параметр "Module per SourceSet" - вместо этого у нас есть модуль для каждого проекта. Эта проблема возникает только с модулем для каждого проекта, который является устаревшим. См.: https://youtrack.jetbrains.com/issue/IDEA-222172

1 ответ

Решение

Итак, я нашел обходной путь:

Добавьте новую конфигурацию:

configurations {
  ideaTestFixturesApi
}

Сделайте существующую конфигурацию testFixturesApi расширением вашей новой конфигурации:

configurations.testFixturesApi.extendsFrom(ideaTestFixturesApi)

Перенесите все свои зависимости из testFixturesApi -> ideaTestFixturesApi, на этом этапе ваша сборка Gradle должна снова запуститься, а ваша сборка IntelliJ должна оставаться сломанной так же, как и раньше.

Применить idea Плагин Gralde и переключите область новой конфигурации на тестирование

plugins {
   id 'idea'
}

// ...

idea {
    module {
       scopes.COMPILE.plus += [configurations.ideaTestFixturesApi]
    }
}

А затем, когда вы обновите свой проект через представление Gradle, вы увидите, что каждый деп, помеченный как COMPILEобласть видимости, которая должна позволить сборке IntelliJ добиться успеха. Вы можете сделать то же самое дляtestFixturesImplementation.

Менее чем идеально, но, похоже, нет никакого способа заставить testFixtures sourceSet, чтобы отображаться как тестовый исходный каталог, это обходной путь, который я сейчас использую.

Другие вопросы по тегам