Gradle SourceSet IntelliJ vs. Eclipse - PullRequest
       64

Gradle SourceSet IntelliJ vs. Eclipse

0 голосов
/ 16 апреля 2020

Я указываю на проблему, когда импортирую проект gradle, который изначально построен с Eclipse , в IntelliJ . Фактически, это проект gradle-project , но когда я импортирую его в IntelliJ, среда IDE сообщает мне, что удаляет (некоторые) дублирующиеся корни содержимого.

Я получаю воздушный шарик - это говорит мне :

Удалены дубликаты корней контента

сообщение в журнале событий:

чч: мм [= 22: 58] Обнаружены повторяющиеся корни содержимого

Путь [/Users/.../someProject/someModule] модуля [someModuleName] удален из модулей [someModuleName.someSourceSetName]

Также Еще 1 путь был deduplicatetd. Подробности смотрите в журнале идей

В общем, это gradle-проект , но я не могу запустить его в IntelliJ. Он строится с использованием gradle-Wrapper в командной строке (./gradlew build) , но я хотел бы собрать с IntelliJ, чтобы улучшить использование с помощью (Recompile + Reload ) и другие функции IDE .

У меня есть следующие модули:

  • A (A - это модуль, который я пытаюсь build)

  • B (B - модуль, в котором я хочу повторно использовать 'main' И 'testutils' модуля A sourceSets)

Модуль A - состоит из 3 исходных наборов (= основной, тестовый, testutils):

src/main/java
src/test/java
src/testutils/java

Модуль A имеет зависимости для testutils (потребляющий 'main'), test (потребляющий 'main' & 'testutils'), main (производство java -sr c модуля)

И Модуль B где sourceSet testutils модуля A требуется в пределах main sr c и tests; Модуль B - использует sourceSet 'A / src / main / java' и 'A / src / testutils / java':

Так что мои файлы Gradle (немного сокращены) :

A / build.gradle:

apply plugin: 'maven'

sourceSets {
    test.java.srcDirs +='src/testutils/java'
    testutils
}

dependencies {
    api project('someOtherProjectA')
    ...

    testImplementation project('someOtherProjectZZ')
    testutilsImplementation sourceSets.test.compileClasspath
}

task testutilsJar(type: Jar) {
    from sourceSets.testutils.output
      appendix 'testutils'
}

configurations {
    testutils
}

artifacts {
    testutils testutilsJar
}

uploadTestutils {
    repositories {
        mavenDeployer {
                configuration = configurations.testutils
                repository(url: mavenPublicRepository) {
                      authentication(userName: repoUsername, password: repoPassword)
                }
        }           
    }
}

publish.dependsOn uploadTestutils

B / build.gradlew:

dependencies {
  api project('someOtherProjectB')

  api "someOtherDependency"
  ...

  testImplementation project('someOtherProjectC')       
  testImplementation project(path: ':A:theNameOfTheModule', configuration: 'testutils')
  ...

}

My Настройки системы DEV:

JDK: 11.0.4
Gradle-Wrapper with Version: gradle-5.5.1
IntelliJ IDEA 2020.1 (Ultimate Edition) - Build #IU-201.6668.121, built on April 8, 2020
    Runtime version: 11.0.6+8-b765.25 x86_64
    VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
    macOS 10.15.4
    Memory: 3987M
    Cores: 16

Я уже пытался использовать ответы из

Я был бы очень признателен за совет, как я могу управлять моим 'testutils' -SourceSet, что он также создает проект с помощью встроенный IntelliJ-Build:

  • Настройки (= Сборка, выполнение, развертывание > Инструменты сборки > Gradle )
    • сборка и запуск с использованием> 'IntelliJ IDEA' (вместо 'Gradle')
    • запуск тестов с использованием> 'IntelliJ IDEA' (вместо 'Gradle')

1 Ответ

0 голосов
/ 16 апреля 2020

Я мог бы найти решение для моей проблемы.

SourceSet определен в модуле A и указан в модуле B.

SourceSets модуля A:

  • main
  • testutils (может использовать main и видеть все зависимости main и test)
  • test (тестирует main + testutils)

в модуле A (build.gradle):

apply plugin: 'maven'

sourceSets {
    testutils
    testutils.compileClasspath += sourceSets.main.output
    testutils.runtimeClasspath += sourceSets.main.output
    test.compileClasspath += sourceSets.testutils.output
    test.runtimeClasspath += sourceSets.testutils.output
}

dependencies {
    api project('someOtherProjectA')
    ...

    testImplementation project('someOtherProjectZZ')
    testutilsImplementation sourceSets.main.compileClasspath
}
...

в модуле B (build.gradle):

dependencies {
  testImplementation project(path: ':A:theNameOfTheModule', configuration: 'testutils')
  ...
}

Модуль B получает доступ только к sourceSet testutils Модуля A.

...