我有一个java库,我已经添加了一个'提供的'使用gradle配置。
apply plugin: 'java'
apply plugin: 'idea'
apply plugin: 'checkstyle'
apply from: file('../gradle/gradle-mvn-push.gradle')
sourceCompatibility = JavaVersion.VERSION_1_7
targetCompatibility = JavaVersion.VERSION_1_7
repositories {
mavenCentral()
}
group = GROUP
version = VERSION_NAME
configurations {
provided
}
sourceSets {
main.compileClasspath += configurations.provided
test.compileClasspath += configurations.provided
test.runtimeClasspath += configurations.provided
}
javadoc.classpath += configurations.provided
idea {
module {
scopes.PROVIDED.plus += [configurations.provided]
}
}
checkstyle {
configFile = new File(rootDir, 'checkstyle.xml')
toolVersion = '6.7'
}
dependencies {
provided 'com.google.android:android:2.3.1'
compile 'com.squareup:javawriter:2.5.0'
compile 'com.workday:metajava:1.0'
}
此设置一切正常。
现在我想在我的库中开始使用kotlin,所以我修改了构建脚本,看起来像这样(没有用)
+buildscript {
+ repositories {
+ mavenCentral()
+ }
+ dependencies {
+ classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:0.12.613"
+ }
+}
apply plugin: 'java'
apply plugin: 'idea'
+apply plugin: 'kotlin'
apply plugin: 'checkstyle'
apply from: file('../gradle/gradle-mvn-push.gradle')
sourceCompatibility = JavaVersion.VERSION_1_7
targetCompatibility = JavaVersion.VERSION_1_7
repositories {
mavenCentral()
}
group = GROUP
version = VERSION_NAME
configurations {
provided
}
sourceSets {
main.compileClasspath += configurations.provided
test.compileClasspath += configurations.provided
test.runtimeClasspath += configurations.provided
}
javadoc.classpath += configurations.provided
idea {
module {
scopes.PROVIDED.plus += [configurations.provided]
}
}
checkstyle {
configFile = new File(rootDir, 'checkstyle.xml')
toolVersion = '6.7'
}
dependencies {
provided 'com.google.android:android:2.3.1'
compile 'com.squareup:javawriter:2.5.0'
compile 'com.workday:metajava:1.0'
+ compile "org.jetbrains.kotlin:kotlin-stdlib:0.12.613"
}
甚至没有添加任何kotlin文件(即使我这样做),库也不再编译说它无法在提供的库中找到类(在我的情况下是android)。
我需要更改哪些内容才能再次识别所提供的依赖项?
答案 0 :(得分:1)
这就是我在Gradle插件中的表现:
private void addProvidedConfiguration() {
final Configuration provided =
addConfiguration(project.configurations, "provided)
final Javadoc javadoc =
project.tasks.getByName(JavaPlugin.JAVADOC_TASK_NAME) as Javadoc
javadoc.classpath = javadoc.classpath.plus(provided)
}
private static Configuration addConfiguration(
final ConfigurationContainer configurations, final String name) {
final Configuration compile =
configurations.getByName(JavaPlugin.COMPILE_CONFIGURATION_NAME)
final Configuration configuration = configurations.create(name)
compile.extendsFrom(configuration)
configuration.visible = false
configuration.transitive = false
configuration.allDependencies.all { final dependency ->
configurations.default.exclude(group: dependency.group, module: dependency.name)
}
return configuration
}
您可以在github上查看源代码。
答案 1 :(得分:0)
此gradle-propdeps
plugin for Gradle将provided
和optional
添加到Gradle,并处理它与IntelliJ IDEA和Eclipse的集成。它来自Spring团队,它有很多用途。
您应该在kotlin
之后应用propdeps
插件。
我没有使用Android库对此进行过测试,但它比尝试推出自己的库更安全。几乎没有特殊情况需要处理。
另一个大量使用的插件是the one from Netflix team,它有许多插件可用于Gradle的不同有用添加。此插件会添加相同的provided
和optional
。
这是一个很好的提醒,Gradle的旧问题Provide a 'provided' configuration仍然有效6年,并且可以在那里提供您对此功能缺乏的看法。