Ошибка: плагин 'Java' был применен, но он не совместим с плагинами Android - PullRequest
0 голосов
/ 25 апреля 2018

Я пытаюсь создать новую библиотеку, которая будет использоваться другими модулями в проектах. К сожалению, хотя, когда я пытаюсь создать его, я получаю упомянутую ошибку еще до того, как 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, но я не вижу ни одной в моей новой библиотеке. Однако я вижу плагин Java в моем корневом Gradle:

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 голосов
/ 25 апреля 2018

Как упоминает @stkent, нам просто нужно избавиться от java-плагина или исключить библиотеку из конфигурации всех проектов в корневом граделе. Чтобы обойти это, я добавил следующее к корневому модулю, в котором был применен плагин Java:

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

    //...
}
0 голосов
/ 25 апреля 2018

Этот код:

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 применялся ко всем проектам , за исключением нового.

Чтобы развернуть второй случай, вы можетесделать что-то вроде:

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

    // ...
  }
}

Я использовал getPath здесь, поскольку getName не гарантированно является уникальным в целом, но если это в вашем конкретном случае, то это было бы более удобным условием для записи ичитать.

...