错误:' java'插件已应用,但它与Android插件不兼容

时间:2018-04-25 13:03:26

标签: java android gradle android-gradle gradle-plugin

我正在尝试创建一个将在项目中的其他模块之间共享的新库。不幸的是,虽然当我尝试创建一个时,我会在gradle甚至构建之前得到所提到的错误:

The 'java' plugin has been applied, but it is not compatible with the Android plugins.

这是我的傻瓜:

apply plugin: 'com.android.library'

android {
    compileSdkVersion 27

    defaultConfig {
        minSdkVersion 19
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    implementation 'com.android.support:appcompat-v7:27.1.1'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.1'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
}

我已经尝试过阅读几个人们建议删除java插件的类似线程,但我在新库中看不到任何内容。但是我确实在我的root gradle中看到了一个java插件:

configure(allprojects) {
  println "applying java plugin to $project"
  apply plugin: 'java-library'

  sourceSets {
    main {
      java {
        srcDirs = ["src"]
      }
      resources {
        srcDirs = ["src/resources"]
      }
    }
  }

  sourceCompatibility = 1.7
  targetCompatibility = 1.7
}

您认为这可能是什么问题?

2 个答案:

答案 0 :(得分:1)

此代码:

configure(allprojects) {
  println "applying java plugin to $project"
  apply plugin: 'java-library'

  //...
}

声明Java库插件应该应用于代码库中的每个Gradle项目。请注意,java插件(应用程序,库)通常与android插件(应用程序,库)不兼容。您可以将后者视为前者的大量修改版本。

这种不兼容性会导致您看到的错误。

最佳解决方案取决于整个代码库的用途以及其中的Gradle项目。可能性最小的选择:

  1. apply plugin: 'java-library'配置中删除allprojects及相关配置,而是在每个需要它的Gradle项目中手动应用插件;
  2. allprojects配置中添加一个特殊情况,以便java-library插件应用于所有项目新项目。
  3. 要扩展第二种情况,您可以执行以下操作:

    configure(allprojects) {
      if (getPath() != "absolute/path/to/new/project") {
        println "applying java plugin to $project"
        apply plugin: 'java-library'
    
        // ...
      }
    }
    

    我在这里使用getPath,因为getName一般不保证是唯一的,但是如果它在你的特定情况下那么那么写和读将是一个更友好的条件。

答案 1 :(得分:1)

正如@stkent所提到的,我们只需要删除java插件,或者从根gradle中的allprojects配置中排除库。我如何处理它是通过将以下内容添加到应用java插件的根gradle:

spring-resourc1.xml