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

错误';java';插件已经应用,但它与Android插件不兼容,java,android,gradle,android-gradle-plugin,gradle-plugin,Java,Android,Gradle,Android Gradle Plugin,Gradle Plugin,我正在尝试创建一个新的库,该库将在项目中的其他模块之间共享。不幸的是,当我尝试创建一个时,我在gradle构建之前就遇到了上述错误: 已经应用了“java”插件,但它与Android插件不兼容。 这是我的格拉德尔: apply plugin: 'com.android.library' android { compileSdkVersion 27 defaultConfig { minSdkVersion 19 targetSdkVersio

我正在尝试创建一个新的库,该库将在项目中的其他模块之间共享。不幸的是,当我尝试创建一个时,我在gradle构建之前就遇到了上述错误:

已经应用了“java”插件,但它与Android插件不兼容。
这是我的格拉德尔:

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插件,但在我的新库中没有看到。但是,我确实在我的根目录中看到了一个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
}
您认为可能是什么问题?

此代码:

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

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

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

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

  • allprojects
    配置中删除
    apply plugin:'java library'
    和相关配置,而是在每个需要它的Gradle项目中手动应用插件
  • allprojects
    配置中添加一个特例,以便
    java库
    插件应用于除新项目之外的所有项目
  • 要扩展第二种情况,可以执行以下操作:

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

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

    正如@stkent提到的,我们只需要去掉java插件,或者从根目录中所有项目的配置中排除该库。我是如何解决这个问题的,在应用java插件的根目录中添加了以下内容:

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

    您的项目中可能有其他Gradle文件(特别是在项目的根目录下);有没有提到Java插件?@stkent我有,它是
    apply-plugin:'Java-library'
    ,但我不能改变这一点,我如何在当前库中解决这个问题?apply-plugin:'Java-library'具体在哪里?在根build.gradle文件中,还是在同级build.gradle文件中?请添加显示如何调用它的代码。谢谢@史肯特:是的,它在根梯度里。只要更新我的OP让你看看,你是对的!我只需要在新库中去掉java插件。我用另一种方式解决了这个问题,我将在下面与大家分享。谢谢很好,非常简洁的解决方案!