Я пытаюсь скомпилировать несколько файлов WAR, все, что зависит от общего модуля JAR. Однако в моей компоновке Gradle я не могу заставить зависимую функцию "Предоставлено" работать с плагином Java.
Моя компиляция выглядит так:
apply plugin: 'java'
configurations{
providedCompile
}
dependencies {
compile module("org.springframework.amqp:spring-amqp:${springAmqpVersion}")
compile module("org.slf4j:slf4j-api:${slf4jVersion}")
compile module("org.slf4j:slf4j-ext:${slf4jVersion}")
providedCompile "javax.servlet:servlet-api:${servletApiVersion}"
runtime module("org.slf4j:jcl-over-slf4j:${slf4jVersion}")
runtime module("org.slf4j:jul-to-slf4j:${slf4jVersion}")
runtime module("org.slf4j:log4j-over-slf4j:${slf4jVersion}")
sourceArchives module("org.springframework.amqp:spring-amqp:${springAmqpVersion}:sources")
sourceArchives module("javax.servlet:servlet-api:${servletApiVersion}:sources")
}
sourceSets {
main { compileClasspath += configurations.providedCompile }
}
Однако этот последний бит - это то место, где он получает исключение. Я попытался добавить servlet-api (предоставленный Tomcat) в конфигурацию после того, как зависимости от выполнения будут расширять его или просто поместить в модуль компиляции, а затем удалить из зависимостей времени выполнения позже.
Я попытался несколько разных способов изменения зависимостей, мои самые близкие результаты:
newRuntime = configurations.runtime.minus(configurations.providedCompile)
configurations.runtime = newRuntime
Однако этот последний бит будет генерировать переменную newRuntime с соответствующими зависимостями, однако, когда я попытался переназначить переменную обратно в конфигурацию времени выполнения, она выдает "Невозможно найти исключение свойства"
Я нашел много обсуждений этой точной проблемы в отслеживании ошибок Gradle: Gradle-784
Однако основной причиной этого является Spring, который использует Maven с их строками Gradle, с которыми я не знаком.
Самая многообещающая ссылка, которую я нашел здесь на SO, но, к сожалению, я не смог заставить примеры работать: SO предоставленный вопрос Обратите внимание на вопрос о переполнении стека, который показал наибольшую перспективу:
//Include provided for compilation
sourceSets.main.compileClasspath += configurations.provided
Эта строка не дает ошибки, как и другие попытки, однако, похоже, что предоставленная предоставленная компиляция (моя версия предоставлена) на самом деле не помещается в путь класса компиляции, так как при попытке компиляции существует ошибка класса.