Узнайте, как игнорировать дублирующиеся классы из каталога "out" при использовании gradle и таких инструментов, как lombok, google protobuf и swagger - PullRequest
0 голосов
/ 22 марта 2019

В моем проекте много модулей, и мы используем gradle с несколькими генераторами кода. Пример конфигурации:

sourceSets {
...
    swagger {
        compileClasspath = configurations.swaggerCompile
        java {
            srcDir file("${project.buildDir.path}/build/generated/source/swagger/")
        }
    }
    main {
        java {
            srcDirs 'build/generated/source/proto/main/...'
        }
    }
    test {
        java {
            srcDirs 'build/generated/source/proto/main/...'
        }
    }
}

ext {
    generatedSourcesDir = 'build/generated/source'
}

protobuf {
    ...
    generatedFilesBaseDir = "${buildDir}/generated-src/..."
}

Проект не компилируется с Intellij, потому что его генерирующие классы как в заданных каталогах, так и в / out /, сгенерированы Intellij.

Те же дублированные классы, например, генерируются в:

\ out \ production \ classes \ генерируется \ - Intellij \ build \ generate-src .. \ - Gradle

Это дает мне сотни сообщений об ошибках, таких как: Ошибка: (30, 14) java: duplicate class: com.xxx.xxx.xxx.YourClass Я перепробовал все, что смог найти здесь и на форумах Intellij. У меня ничего не получалось.

Я даже пытался исключить каталог «out» в «Файл»> «Настройки»> «Построение, выполнение, развертывание> Компилятор»> «Исключает», но он тоже не работает.

Единственный способ - построить проект, вручную удалить все «out» каталоги, а затем отключить процессоры аннотаций. Но это не лучший способ заставить его работать.

...