ПредоставленКомпилировать без плагина
Я хочу повторно использовать определенный фильтр для многих проектов, поэтому я хочу извлечь его и использовать одну банку, чтобы просто добавить ее в любое веб-приложение.
Для построения я использую Gradle 1.3 и следующий build.gradle
файл:
apply plugin: 'java'
dependencies {
compile group:'org.slf4j', name:'slf4j-api', version:'1.7.+'
testCompile group:'junit', name:'junit', version:'4.+'
compile group:'org.springframework', name:'spring-web', version:'3.+'
compile group:'org.slf4j', name:'slf4j-log4j12', version:'1.6.+'
compile group:'log4j', name:'log4j', version:'1.2.+'
providedCompile group: 'javax.servlet', name: 'javax.servlet-api', version:'3.+'
}
repositories {
mavenCentral()
}
Как вы можете видеть, мне нужен сервлет api, чтобы скомпилировать этот фильтр успешно, поэтому я хочу добавить его как зависимость от maven.
В любом случае, после запуска gradle build
, я получаю следующую ошибку:
Не удалось найти метод предоставленныйCompile() для аргументов [{group = javax.servlet, name = javax.servlet-api, version = 3. +}] в корне project 'hibernate-talk-context'.
Теперь я знаю, что я не могу использовать предоставленный компилятор без плагина WAR, но мне нужен проект как простой JAR. Есть ли другой способ сделать это?
Ответы
Ответ 1
Нет такой конфигурации из коробки для плагина java
. Однако вы можете построить его самостоятельно следующим образом:
configurations { providedCompile }
dependencies {
providedCompile "javax.servlet:javax.servlet-api:3.+"
}
sourceSets.main.compileClasspath += configurations.providedCompile
sourceSets.test.compileClasspath += configurations.providedCompile
sourceSets.test.runtimeClasspath += configurations.providedCompile
Это добавляет конфигурацию и помещает туда все зависимости в компиляционных классах классов как ваших основных классов, так и тестовых классов. Вам также нужно добавить его в runtimeClasspath, так как это не включает путь класса компиляции в соответствии с документацией DSL gradle.
Ответ 2
Взгляните на плагин Gradle propdeps из SpringSource. Из описания проекта:
Предоставляет дополнительные дополнительные и предоставленные конфигурации зависимостей для Gradle вместе с поддержкой поколения Maven POM.
Ответ 3
По состоянию на Gradle 2.12 проблема определения компиляции только зависимостей окончательно решена простым и естественным образом с помощью новой конфигурации "copmpileOnly":
dependencies {
compileOnly 'javax.servlet:servlet-api:2.5'
}
Ответ 4
Недавно я написал сообщение в блоге, которое охватывает именно этот сценарий. Он также показывает, как правильно настроить интеграцию с Eclipse.
http://blog.codeaholics.org/2012/emulating-mavens-provided-scope-in-gradle/
Ответ 5
Существует более простой способ:
configurations {
provided
provided.extendsFrom(compile)
}
а затем вы можете:
dependencies {
provided group: 'javax.servlet', name: 'javax.servlet-api', version:'3.+'
}
Вы также захотите иметь предоставленные библиотеки в сгенерированных файлах проекта Eclipse или Idea:
idea.module.scopes.PROVIDED.plus += configurations.provided
eclipse.classpath.plusConfigurations += configurations.provided
Ответ 6
Когда вы обнаружите, что используете Gradle 2.12, измените 'providedCompile' на 'compileOnly'.
Ответ 7
Чтобы выполнить работу javadoc, я должен был добавить это:
javadoc.classpath=sourceSets.main.compileClasspath