gradle - 使用 gradle 将 'provided' 配置添加到 kotlin/java 库

标签 gradle kotlin

我有一个 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 文件(即使我添加了),库不再编译说它无法在提供的库中找到类(在我的例子中是 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 将 'provided' 配置添加到 kotlin/java 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32239087/

相关文章:

gradle - 避免多模块 Gradle 项目中重复的存储库声明

generics - kotlin 泛型和运算符重载

android - 如何制作通知 Activity 以在android中保存通知

Android Kotlin Retrofit Post 请求输入的数据未发送

android - 在Android中单击通知时如何打开应用程序?

android - 如何从Cordova项目中删除android依赖项

android - 如何运行从git android checkout 的项目

android - Kotlin 协程 : RxJava-like subscribe to running job/Check if coroutine is running

android - 如何在gradle构建脚本中预生成sqlite数据库

android - 错误:gradle构建后已经完成