Error: The 'java' plugin has been applied, but it is not compatible with the Android plugins
Error: The 'java' plugin has been applied, but it is not compatible with the Android plugins
我正在尝试创建一个将在项目中的其他模块之间共享的新库。不幸的是,虽然当我尝试创建一个时,我在 gradle 甚至构建之前得到了提到的错误:
The 'java' plugin has been applied, but it is not compatible with the Android plugins.
这是我的 gradle:
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 插件,但我在我的新库中没有看到任何内容。但是我确实在我的根 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
}
您认为可能是什么问题?
此代码:
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-library
插件应用于所有项目 除了 新项目。
要扩展第二种情况,您可以这样做:
configure(allprojects) {
if (getPath() != "absolute/path/to/new/project") {
println "applying java plugin to $project"
apply plugin: 'java-library'
// ...
}
}
我在这里使用了 getPath
,因为通常 getName
不能保证是唯一的,但如果在您的特定情况下是唯一的,那么这将是一个更友好的读写条件。
正如@stkent 提到的,我们只需要摆脱 java 插件,或者从根 gradle 中所有项目的配置中排除该库。我如何解决这个问题是通过将以下内容添加到应用 java 插件的根目录 gradle 中:
configure(allprojects - project(':NewLibraryName')) {
println "applying java plugin to $project"
apply plugin: 'java-library'
//...
}
我正在尝试创建一个将在项目中的其他模块之间共享的新库。不幸的是,虽然当我尝试创建一个时,我在 gradle 甚至构建之前得到了提到的错误:
The 'java' plugin has been applied, but it is not compatible with the Android plugins.
这是我的 gradle:
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 插件,但我在我的新库中没有看到任何内容。但是我确实在我的根 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
}
您认为可能是什么问题?
此代码:
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-library
插件应用于所有项目 除了 新项目。
要扩展第二种情况,您可以这样做:
configure(allprojects) {
if (getPath() != "absolute/path/to/new/project") {
println "applying java plugin to $project"
apply plugin: 'java-library'
// ...
}
}
我在这里使用了 getPath
,因为通常 getName
不能保证是唯一的,但如果在您的特定情况下是唯一的,那么这将是一个更友好的读写条件。
正如@stkent 提到的,我们只需要摆脱 java 插件,或者从根 gradle 中所有项目的配置中排除该库。我如何解决这个问题是通过将以下内容添加到应用 java 插件的根目录 gradle 中:
configure(allprojects - project(':NewLibraryName')) {
println "applying java plugin to $project"
apply plugin: 'java-library'
//...
}