使用gradle将“提供的”配置添加到kotlin / java库

我有一个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,所以我修改了构建脚本,看起来像这样(sans pluses)

 +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文件(即使我这样做),库不再编译说,它无法find所提供的库中的类(在我的情况下的android)。

我需要改变什么来获取它,以便再次识别提供的依赖关系?

这就是我在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上查看源代码。

Gradle的这个gradle-propdeps插件增加provided Gradle providedoptional ,也处理了它与IntelliJ IDEA和Eclipse的集成。 这是来自Spring团队,它有很多用法。

您应该在kotlin之后应用kotlin插件。

我还没有用Android库进行测试,但是比试图推出自己的游戏更安全。 有一些特殊的情况下处理。

Netflix团队也使用了另外一个插件,他们有许多插件可用于添加Gradle。 这个插件添加相同的providedoptional

这是一个很好的提醒,为Gradle 提供一个“提供的”配置的旧问题仍然是优秀的6年,并随时提供您的意见,因为缺乏这一function。