Как заставить IntelliJ игнорировать подмножество исходных наборов gradle? - PullRequest
0 голосов
/ 29 мая 2019

Я работаю над компилятором, написанным на Java, компилируя файлы классов, сгенерированные JDK 7-11, в другой формат.Для тестирования компилятора, помимо прочего, у меня есть gradle-компиляция самого компилятора с использованием JDK 7-11 и использование файла выходного класса в качестве входных данных для теста.

Для этого я настроил несколько исходных наборов:

compilerJava11 {
        java {
            srcDirs = ['src/main']
        }
    }
compilerJava10 {
        java {
            srcDirs = ['src/main']
        }
    }
...

Затем я устанавливаю компилятор для каждого sourceSet:

tasks.named(sourceSets.compilerJava11.compileJavaTaskName).get().configure {
    def jdkDir = 'third_party/openjdk/jdk-11/'
    options.fork = true
    options.forkOptions.jvmArgs = []
    if (OperatingSystem.current().isLinux()) {
        options.forkOptions.javaHome = file(jdkDir + 'Linux')
    } else if (OperatingSystem.current().isMacOsX()) {
        options.forkOptions.javaHome = file(jdkDir + 'Mac')
    } else {
        options.forkOptions.javaHome = file(jdkDir + 'Windows')
    }
    sourceCompatibility = JavaVersion.VERSION_11
    targetCompatibility = JavaVersion.VERSION_11
}
...

И Gradle правильно генерирует мне файлы классов для компилятора через разные JDK, которые я могу правильно использовать в качестве вводадля теста.

Теперь моя проблема в том, что я работаю в IntelliJ, а srcDir 'src / main' используется в нескольких sourceSets.IntelliJ путается с содержимым основной папки, сообщая, что существует несколько копий (main.pathToFile, compilerJava10.pathToFile, compilerJava11.pathToFile и т. Д.), А часть инструментов перепутана и работает неправильно.

Чтобы решить эту проблему, я пошел в Структура проекта >> Модули и удалил все модули compilerJava11, compilerJava10, ..., оставив только основной модуль и не связанные модули.Теперь у меня все еще есть файлы классов, выведенные Gradle через удаленный sourceSet, и IntelliJ ведет себя правильно.Мне нужно запустить Gradle за пределами IntelliJ для регенерации файлов классов, созданных различными JDK, но это нормально.Итак, все хорошо.

Теперь каждый раз, когда я синхронизируюсь с Gradle, мне нужно снова вручную удалять модули.Это очень раздражает.

Я хотел бы указать что-то в IntelliJ или в файле сборки Gradle, чтобы IntelliJ не импортировал компилятор sourceSet gradleJava10, compilerJava11 и т. Д., Но все же импортировал другие исходные наборы (main, theдругие тестовые наборы sourceSet и т. д.) в виде модулей.

Что я могу указать и где IntelliJ не импортирует подмножество доступных наборов sourceSets в виде модулей?

Могу ли я сделать что-то вроде:

compilerJava11 {
        ideaImport = false
        java {
            srcDirs = ['src/main']
        }
    }

Так что эта идея не импортирует компиляторJava11 sourceSet.

В качестве альтернативы, если бы вы могли предоставить мне способ компилировать один и тот же sourceSet (в моем случае main) с различными компиляторами Java и сохранитьразличные выходы, которые также будут работать для меня.

Спасибо

Решение:

В конце я перестал дублировать исходные наборы и создал вместо этогоотдельная задача JavaCompile, чтобы получить скомпилированные файлы классов, которые я хотел.Примером может быть:

task compileMainWithJava11 (type: JavaCompile) {
    def jdkDir = 'third_party/openjdk/jdk-11/'
    options.fork = true
    options.forkOptions.jvmArgs = []
    if (OperatingSystem.current().isLinux()) {
        options.forkOptions.javaHome = file(jdkDir + 'Linux')
    } else if (OperatingSystem.current().isMacOsX()) {
        options.forkOptions.javaHome = file(jdkDir + 'Mac')
    } else {
        options.forkOptions.javaHome = file(jdkDir + 'Windows')
    }
    source = sourceSets.main.allSource
    destinationDir = file(java11ClassFiles)
    sourceCompatibility = JavaVersion.VERSION_11
    targetCompatibility = JavaVersion.VERSION_11
    classpath = sourceSets.main.compileClasspath
}

Затем я могу получить доступ к полученным файлам в file(java11ClassFiles).Спасибо всем за помощь.

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