遇到的问题 :
Error:No such property: outputs for class: com.android.build.gradle.internal.variant.ApplicationVariantData
异常类型:app编译异常
tinker版本:最新版本
gradle版本:4.1
gradle 插件版本: 3.0.0
是否使用热更新SDK:使用的是 Bugly SDK集成的Tinker
系统:Windows
补充: 使用是Bugly的方式进行集成的,所有步骤都按照文档配置的,最后同步gradle的时候出现的上面的问题。 以前的项目中也集成过Tinker,同样是使用Bugly的方式,当时并没有遇到任何问题就集成成功了,但是这次集成却提示没有ApplicationVariantData属性,如果把Bugly以及tinker的代码全部移除,gradle可以正常同步,不会报错,但是一旦加入Bugly以及tinker的代码,就会报这个错。我用的是Bugly最新的gradle插件( "com.tencent.bugly:tinker-support:1.1.0”)
gradle console的堆栈日志:
Executing tasks: [clean, :commonlibrary:generateDebugSources, :LivenessLib:generateDebugSources, :IDCardLib:generateDebugSources, :app:generate360DebugSources]
Configuration on demand is an incubating feature.
Configuration 'compile' in project ':IDCardLib' is deprecated. Use 'implementation' instead.
Configuration 'androidTestCompile' in project ':IDCardLib' is deprecated. Use 'androidTestImplementation' instead.
Configuration 'testCompile' in project ':IDCardLib' is deprecated. Use 'testImplementation' instead.
Configuration 'compile' in project ':LivenessLib' is deprecated. Use 'implementation' instead.
Configuration 'androidTestCompile' in project ':LivenessLib' is deprecated. Use 'androidTestImplementation' instead.
Configuration 'testCompile' in project ':LivenessLib' is deprecated. Use 'testImplementation' instead.
TinkerSupport Plugin Version: 1.1.0
Requires:
Android Plugin for Gradle, Revision 2.0.0 or higher
Dependencies:
Gradle 2.10 or higher (Current Gradle Version: 4.1)
apply plugin: 'com.tencent.tinker.patch'
Configuration 'compile' in project ':app' is deprecated. Use 'implementation' instead.
Configuration 'testCompile' in project ':app' is deprecated. Use 'testImplementation' instead.
Configuration 'androidTestCompile' in project ':app' is deprecated. Use 'androidTestImplementation' instead.
----------------------tinker build warning ------------------------------------
tinker auto operation:
excluding annotation processor and source template from app packaging. Enable dx jumboMode to reduce package size.
enable dx jumboMode to reduce package size.
disable preDexLibraries to prevent ClassDefNotFoundException when your app is booting.
tinker will change your build configs:
we will add TINKER_ID=null in your build output manifest file build/intermediates/manifests/full/*
if minifyEnabled is true
you will find the gen proguard rule file at build/intermediates/tinker_intermediates/tinker_proguard.pro
and we will help you to put it in the proguardFiles.
if multiDexEnabled is true
you will find the gen multiDexKeepProguard file at build/intermediates/tinker_intermediates/tinker_multidexkeep.pro
and we will help you to put it in the MultiDexKeepProguardFile.
if applyResourceMapping file is exist
we will build app apk with resource R.txt file
if resources.arsc has changed, you should use applyResource mode to build the new apk!
-----------------------------------------------------------------
----------------------tinker-support build warning ------------------------------------
if you not set autoBackupApkDir we will auto backup the build file to D:\AndroidWorkSpace\CashLoan\app/tinker.
if overrideTinkerPatchConfiguration is true
we will override tinker patch configuration,you must use tinker-support's configuration
you will find the gen proguard rule file at build/intermediates/bugly_intermediates/bugly_proguard.pro
and we will help you to put it in the proguardFiles.
if enableProxyApplication is true
we will replace you real application to TINKER_PATCH_APPLICATION
if autoGenerateTinkerId is true
we will auto set base tinkerId as versionName.versionCode, like 1.0.1
-----------------------------------------------------------------
variantName:XiaomiDebug
outputVariantName:Xiaomi-debug
FAILURE: Build failed with an exception.
* What went wrong:
A problem occurred configuring project ':app'.
> No such property: outputs for class: com.android.build.gradle.internal.variant.ApplicationVariantData
* Try:
Run with --info or --debug option to get more log output.
* Exception is:
org.gradle.api.ProjectConfigurationException: A problem occurred configuring project ':app'.
at org.gradle.configuration.project.LifecycleProjectEvaluator.addConfigurationFailure(LifecycleProjectEvaluator.java:87)
at org.gradle.configuration.project.LifecycleProjectEvaluator.notifyAfterEvaluate(LifecycleProjectEvaluator.java:82)
at org.gradle.configuration.project.LifecycleProjectEvaluator.doConfigure(LifecycleProjectEvaluator.java:69)
at org.gradle.configuration.project.LifecycleProjectEvaluator.access$100(LifecycleProjectEvaluator.java:33)
at org.gradle.configuration.project.LifecycleProjectEvaluator$ConfigureProject.run(LifecycleProjectEvaluator.java:103)
at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:197)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:107)
at org.gradle.configuration.project.LifecycleProjectEvaluator.evaluate(LifecycleProjectEvaluator.java:49)
at org.gradle.api.internal.project.DefaultProject.evaluate(DefaultProject.java:651)
at org.gradle.api.internal.project.DefaultProject.evaluate(DefaultProject.java:133)
at org.gradle.execution.TaskPathProjectEvaluator.configure(TaskPathProjectEvaluator.java:35)
at org.gradle.execution.TaskPathProjectEvaluator.configureHierarchy(TaskPathProjectEvaluator.java:62)
at org.gradle.execution.TaskSelector.getSelection(TaskSelector.java:100)
at org.gradle.execution.TaskSelector.getSelection(TaskSelector.java:81)
at org.gradle.execution.commandline.CommandLineTaskParser.parseTasks(CommandLineTaskParser.java:42)
at org.gradle.execution.TaskNameResolvingBuildConfigurationAction.configure(TaskNameResolvingBuildConfigurationAction.java:44)
at org.gradle.execution.DefaultBuildConfigurationActionExecuter.configure(DefaultBuildConfigurationActionExecuter.java:48)
at org.gradle.execution.DefaultBuildConfigurationActionExecuter.access$000(DefaultBuildConfigurationActionExecuter.java:25)
at org.gradle.execution.DefaultBuildConfigurationActionExecuter$1.proceed(DefaultBuildConfigurationActionExecuter.java:54)
at org.gradle.execution.DefaultTasksBuildExecutionAction.configure(DefaultTasksBuildExecutionAction.java:44)
at org.gradle.execution.DefaultBuildConfigurationActionExecuter.configure(DefaultBuildConfigurationActionExecuter.java:48)
at org.gradle.execution.DefaultBuildConfigurationActionExecuter.access$000(DefaultBuildConfigurationActionExecuter.java:25)
at org.gradle.execution.DefaultBuildConfigurationActionExecuter$1.proceed(DefaultBuildConfigurationActionExecuter.java:54)
at org.gradle.execution.ExcludedTaskFilteringBuildConfigurationAction.configure(ExcludedTaskFilteringBuildConfigurationAction.java:47)
at org.gradle.execution.DefaultBuildConfigurationActionExecuter.configure(DefaultBuildConfigurationActionExecuter.java:48)
at org.gradle.execution.DefaultBuildConfigurationActionExecuter.select(DefaultBuildConfigurationActionExecuter.java:36)
at org.gradle.initialization.DefaultGradleLauncher$CalculateTaskGraph.run(DefaultGradleLauncher.java:265)
at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:197)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:107)
at org.gradle.initialization.DefaultGradleLauncher.constructTaskGraph(DefaultGradleLauncher.java:173)
at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:128)
at org.gradle.initialization.DefaultGradleLauncher.executeTasks(DefaultGradleLauncher.java:107)
at org.gradle.internal.invocation.GradleBuildController$1.call(GradleBuildController.java:78)
at org.gradle.internal.invocation.GradleBuildController$1.call(GradleBuildController.java:75)
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:152)
at org.gradle.internal.invocation.GradleBuildController.doBuild(GradleBuildController.java:100)
at org.gradle.internal.invocation.GradleBuildController.run(GradleBuildController.java:75)
at org.gradle.tooling.internal.provider.runner.BuildModelActionRunner.run(BuildModelActionRunner.java:53)
at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
at org.gradle.tooling.internal.provider.ValidatingBuildActionRunner.run(ValidatingBuildActionRunner.java:32)
at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner$1.run(RunAsBuildOperationBuildActionRunner.java:43)
at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:197)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:107)
at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner.run(RunAsBuildOperationBuildActionRunner.java:40)
at org.gradle.tooling.internal.provider.SubscribableBuildActionRunner.run(SubscribableBuildActionRunner.java:51)
at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:45)
at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:29)
at org.gradle.launcher.exec.BuildTreeScopeBuildActionExecuter.execute(BuildTreeScopeBuildActionExecuter.java:39)
at org.gradle.launcher.exec.BuildTreeScopeBuildActionExecuter.execute(BuildTreeScopeBuildActionExecuter.java:25)
at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:71)
at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:45)
at org.gradle.tooling.internal.provider.ServicesSetupBuildActionExecuter.execute(ServicesSetupBuildActionExecuter.java:51)
at org.gradle.tooling.internal.provider.ServicesSetupBuildActionExecuter.execute(ServicesSetupBuildActionExecuter.java:32)
at org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.execute(GradleThreadBuildActionExecuter.java:36)
at org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.execute(GradleThreadBuildActionExecuter.java:25)
at org.gradle.tooling.internal.provider.ParallelismConfigurationBuildActionExecuter.execute(ParallelismConfigurationBuildActionExecuter.java:43)
at org.gradle.tooling.internal.provider.ParallelismConfigurationBuildActionExecuter.execute(ParallelismConfigurationBuildActionExecuter.java:29)
at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:64)
at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:29)
at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:55)
at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:42)
at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:58)
at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:33)
at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:67)
at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:37)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:26)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:34)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:74)
at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:72)
at org.gradle.util.Swapper.swap(Swapper.java:38)
at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:72)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
at org.gradle.launcher.daemon.server.exec.LogAndCheckHealth.execute(LogAndCheckHealth.java:55)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:62)
at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:82)
at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:50)
at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:297)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
Caused by: groovy.lang.MissingPropertyException: No such property: outputs for class: com.android.build.gradle.internal.variant.ApplicationVariantData
at com.tencent.bugly.build.gradle.TinkerSupportPlugin.createTinkerPatchAllFlavorsTask(TinkerSupportPlugin.groovy:283)
at com.tencent.bugly.build.gradle.TinkerSupportPlugin$createTinkerPatchAllFlavorsTask$0.callCurrent(Unknown Source)
at com.tencent.bugly.build.gradle.TinkerSupportPlugin.processTinkerPatch(TinkerSupportPlugin.groovy:271)
at com.tencent.bugly.build.gradle.TinkerSupportPlugin$_apply_closure1$_closure6$_closure7.doCall(TinkerSupportPlugin.groovy:127)
at com.tencent.bugly.build.gradle.TinkerSupportPlugin$_apply_closure1$_closure6.doCall(TinkerSupportPlugin.groovy:109)
at org.gradle.api.internal.ClosureBackedAction.execute(ClosureBackedAction.java:71)
at org.gradle.util.ConfigureUtil.configureTarget(ConfigureUtil.java:160)
at org.gradle.util.ConfigureUtil.configure(ConfigureUtil.java:106)
at org.gradle.util.ConfigureUtil$1.execute(ConfigureUtil.java:123)
at org.gradle.api.internal.DefaultDomainObjectCollection.all(DefaultDomainObjectCollection.java:136)
at org.gradle.api.internal.DefaultDomainObjectCollection.all(DefaultDomainObjectCollection.java:154)
at org.gradle.api.DomainObjectCollection$all.call(Unknown Source)
at com.tencent.bugly.build.gradle.TinkerSupportPlugin$_apply_closure1.doCall(TinkerSupportPlugin.groovy:104)
at org.gradle.listener.ClosureBackedMethodInvocationDispatch.dispatch(ClosureBackedMethodInvocationDispatch.java:40)
at org.gradle.listener.ClosureBackedMethodInvocationDispatch.dispatch(ClosureBackedMethodInvocationDispatch.java:25)
at org.gradle.internal.event.AbstractBroadcastDispatch.dispatch(AbstractBroadcastDispatch.java:42)
at org.gradle.internal.event.BroadcastDispatch$SingletonDispatch.dispatch(BroadcastDispatch.java:230)
at org.gradle.internal.event.BroadcastDispatch$SingletonDispatch.dispatch(BroadcastDispatch.java:149)
at org.gradle.internal.event.AbstractBroadcastDispatch.dispatch(AbstractBroadcastDispatch.java:58)
at org.gradle.internal.event.BroadcastDispatch$CompositeDispatch.dispatch(BroadcastDispatch.java:324)
at org.gradle.internal.event.BroadcastDispatch$CompositeDispatch.dispatch(BroadcastDispatch.java:234)
at org.gradle.internal.event.ListenerBroadcast.dispatch(ListenerBroadcast.java:140)
at org.gradle.internal.event.ListenerBroadcast.dispatch(ListenerBroadcast.java:37)
at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
at com.sun.proxy.$Proxy24.afterEvaluate(Unknown Source)
at org.gradle.configuration.project.LifecycleProjectEvaluator.notifyAfterEvaluate(LifecycleProjectEvaluator.java:75)
... 95 more
* Get more help at https://help.gradle.org
BUILD FAILED in 0s
以下是我的gradle配置代码(隐私代码已做保护)
apply plugin: 'com.android.application'
apply plugin: 'org.greenrobot.greendao'
apply from: 'tinker-support.gradle'
android {
compileSdkVersion 25
buildToolsVersion "26.0.2"
defaultConfig {
applicationId "xxxxx"
minSdkVersion 14
targetSdkVersion 23
versionCode 121
versionName "1.2.1"
manifestPlaceholders = [
applicationLabel: "@string/app_name",
activityLabel : "@string/app_name",
umengChannel : "guanwang"
]
buildConfigField("String", "OS", "\"android\"")
multiDexEnabled true
}
signingConfigs {
release {
storeFile file("xxxxx.jks")
storePassword "xxxxx"
keyAlias "xxxxx"
keyPassword "xxxxx"
}
}
buildTypes {
release {
zipAlignEnabled true
minifyEnabled true
signingConfig signingConfigs.release
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
debug {
signingConfig signingConfigs.release
}
}
flavorDimensions "default"
productFlavors {
def path = "../channel.properties"
file(path).eachLine { line ->
def name = line
if ("sogou" == name) {
"$name" {
dimension "default"
buildConfigField("String", "APP_CHANNEL", "\"$name\"")
manifestPlaceholders = [applicationLabel: "@string/app_name", umengChannel: name]
}
} else if ("oppo" == name) {
"$name" {
dimension "default"
buildConfigField("String", "APP_CHANNEL", "\"$name\"")
manifestPlaceholders = [applicationLabel: "@string/app_name", activityLabel: "@string/app_name", umengChannel: name]
}
} else {
"$name" {
dimension "default"
buildConfigField("String", "APP_CHANNEL", "\"$name\"")
manifestPlaceholders = [applicationLabel: "@string/app_name", umengChannel: name]
}
}
}
}
lintOptions {
checkReleaseBuilds false
abortOnError false
}
dataBinding {
enabled true
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
testCompile 'junit:junit:4.12'
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
//multidex
compile "com.android.support:multidex:1.0.2"
//bugly热修复
compile 'com.tencent.bugly:crashreport_upgrade:1.3.3'
}
刚才又测试了一下:
把下面打渠道包的代码注释掉就不会报错了,否则还是一样报错。
flavorDimensions "default"
productFlavors {
def path = "../channel.properties"
file(path).eachLine { line ->
def name = line
if ("sogou" == name) {
"$name" {
dimension "default"
buildConfigField("String", "APP_CHANNEL", "\"$name\"")
manifestPlaceholders = [applicationLabel: "@string/app_name", umengChannel: name]
}
} else if ("oppo" == name) {
"$name" {
dimension "default"
buildConfigField("String", "APP_CHANNEL", "\"$name\"")
manifestPlaceholders = [applicationLabel: "@string/app_name", activityLabel: "@string/app_name", umengChannel: name]
}
} else {
"$name" {
dimension "default"
buildConfigField("String", "APP_CHANNEL", "\"$name\"")
manifestPlaceholders = [applicationLabel: "@string/app_name", umengChannel: name]
}
}
}
}
Tinker不支持gradle中配置渠道包的方式吗?
同上。。
@shwenzhang 请来看一下,最新的Tinker集成进来,与AndroidStudio3.0版本productFlavors不兼容, 报Error:No such property: outputs for class: com.android.build.gradle.internal.variant.ApplicationVariantData错误,官方给的最新的Sample编译时也有同样的问题!!!
Tinker和productFlavors的代码注释掉任意一个都可以正常编译,同时存在就会报错!
我也遇到了这个错误,
我也遇到了这个错误。
+1
+1
+1
+1
bugly sdk请联系bugly相关人员,tinekr 1.9.1是支持gradle 3.0的
有谁可以了?我更新到了 bugly 的 1.3.3版本还是不行
@a1018875550 http://dev.qq.com/topic/5a0cfef91d8190380176e74d bugly并没有解决
+1
请问什么时候发新版本修复?
@walkthehorizon 修复了,用classpath "com.tencent.bugly:tinker-support:1.1.1"
change to below:
def buildType = variant.buildType.name
Most helpful comment
@shwenzhang 请来看一下,最新的Tinker集成进来,与AndroidStudio3.0版本productFlavors不兼容, 报
Error:No such property: outputs for class: com.android.build.gradle.internal.variant.ApplicationVariantData错误,官方给的最新的Sample编译时也有同样的问题!!!Tinker和productFlavors的代码注释掉任意一个都可以正常编译,同时存在就会报错!