Подтвердить что ты не робот

ПредоставленКомпилировать без плагина

Я хочу повторно использовать определенный фильтр для многих проектов, поэтому я хочу извлечь его и использовать одну банку, чтобы просто добавить ее в любое веб-приложение.

Для построения я использую 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. Есть ли другой способ сделать это?

4b9b3361

Ответ 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'
}

Ответ 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