Я пытаюсь создать новую библиотеку, которая будет использоваться другими модулями в проектах. К сожалению, хотя, когда я пытаюсь создать его, я получаю указанную ошибку еще до того, как 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 в моем корневом градиенте:
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
}
Как вы думаете, в чем может быть проблема?
@stkent Да, это apply plugin: 'java-library', но я не могу это изменить, как мне решить эту проблему в текущей библиотеке?
Где именно apply plugin: 'java-library'? В корневом файле build.gradle или в родственном файле build.gradle? Пожалуйста, добавьте код, который также показывает, как он вызывается. Спасибо!
@stkent да, это в корне градиента. Просто обновите мой OP, чтобы вы его увидели.




Этот код:
configure(allprojects) {
println "applying java plugin to $project"
apply plugin: 'java-library'
//...
}
заявляет, что подключаемый модуль библиотеки Java должен применяться к каждому проекту Gradle в вашей кодовой базе. Обратите внимание, что плагины java (приложение, библиотека) обычно несовместимы с плагинами android (приложение, библиотека). Вы можете думать о последних как о сильно модифицированных версиях первого.
Эта несовместимость вызывает ошибку, которую вы видите.
Лучшее разрешение зависит от целей вашей кодовой базы в целом и проектов Gradle в ней. Вероятны наименее инвазивные варианты:
apply plugin: 'java-library' и связанную с ним конфигурацию из конфигурации allprojects и вместо этого вручную примените плагин в каждом проекте Gradle, который в нем нуждается;allprojects, чтобы плагин java-library применялся ко всем проектам Кроме новый.Чтобы расширить второй случай, вы можете сделать что-то вроде:
configure(allprojects) {
if (getPath() != "absolute/path/to/new/project") {
println "applying java plugin to $project"
apply plugin: 'java-library'
// ...
}
}
Я использовал здесь getPath, поскольку уникальность getName в целом не гарантируется, но если это в вашем конкретном случае, то это было бы более удобным условием для записи и чтения.
Ты прав! Мне просто нужно было избавиться от плагина java в новой библиотеке. Я решил обойти это другим способом, которым поделюсь ниже. Спасибо!
Как упоминает @stkent, нам просто нужно избавиться либо от плагина java, либо исключить библиотеку из конфигурации всех проектов в корневом градиенте. Я решил обойти это, добавив следующее в корневой градиент, к которому был применен плагин java:
configure(allprojects - project(':NewLibraryName')) {
println "applying java plugin to $project"
apply plugin: 'java-library'
//...
}
Красивое, очень аккуратное решение!
У вас, вероятно, есть другие файлы Gradle в вашем проекте (в частности, в корне проекта); Кто-нибудь из них упоминает плагин Java?