是否有可能使用gradle来生成依赖于什么的树?
我有一个项目,并希望找出所有的依赖项,所以我可以通过前向声明等来修剪它.
所以,现在我有一个图书馆项目,说项目public static取决于像这样的图书馆public static.
现在,它public static有一个maven buildstep,可以生成AAR并将其推送到公共场所.
所以现在让我说我有项目B,我们会称之为public static.Bar是一个Android应用程序,public static依赖于public static.
好吧,我有.但是,当我从该调用中调用public static函数时,我收到以下消息:public staticpublic staticpublic static
java.lang.NoClassDefFoundError: com.squareup.okhttp.OkUrlFactory
at com.foo.sdk.utils.OkHttpStack.<init>(OkHttpStack.java:15)
Run Code Online (Sandbox Code Playgroud)
那么,这样的事情可能吗?或者public static需要手动依赖public static以及任何其他依赖项public static?
通过 build.gradle 构建 Kotlin 项目成功:
compileKotlin {
kotlinOptions.jvmTarget = JavaVersion.VERSION_1_8
}
compileTestKotlin {
kotlinOptions.jvmTarget = JavaVersion.VERSION_1_8
}
Run Code Online (Sandbox Code Playgroud)
好的。
但我需要更改为build.gradle.kts:
plugins {
kotlin("jvm") version "1.2.10"
id("application")
}
group = "com.myproject"
version = "1.0-SNAPSHOT"
application {
mainClassName = "MainKt"
}
java.sourceCompatibility = JavaVersion.VERSION_1_8
repositories {
mavenCentral()
jcenter()
}
val kotlinVer = "1.2.10"
dependencies {
compile(kotlin(module = "stdlib-jre8", version = kotlinVer))
implementation("com.google.code.gson:gson:2.7")
implementation("com.squareup.okhttp3:logging-interceptor:3.8.0")
implementation("com.squareup.retrofit2:converter-gson:2.1.0")
implementation("com.squareup.retrofit2:retrofit:2.5.0")
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
}
compileKotlin {
kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
kotlinOptions.jvmTarget = "1.8"
}
Run Code Online (Sandbox Code Playgroud)
现在我得到错误:
Line …Run Code Online (Sandbox Code Playgroud) kapt在声明依赖项时,Gradle和之间有什么区别implementation,以及何时应该使用其中一个而不是另一个?
例子:
//Room Components
implementation "androidx.room:room-runtime:$rootProject.roomVersion"
kapt "androidx.room:room-compiler:$rootProject.roomVersion"
// dagger
implementation "com.google.dagger:dagger:$rootProject.ext.daggerVersion"
kapt "com.google.dagger:dagger-android processor:$rootProject.ext.daggerVersion"
Run Code Online (Sandbox Code Playgroud) 错误:(36, 0) 无法在 org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler 类型的对象上找到参数 [project ':model'] 的方法 api()
请帮我。
这是我的 build.gradle 文件。
apply plugin: 'com.android.application'
//apply plugin: 'io.fabric'
android {
compileSdkVersion 26
buildToolsVersion "26.0.2"
defaultConfig {
applicationId "com.manafzar.mytaxi.driver"
minSdkVersion 16
targetSdkVersion 26
versionCode 23
versionName "2.0.3"
multiDexEnabled true
vectorDrawables.useSupportLibrary = true
javaCompileOptions {
annotationProcessorOptions {
arguments = [eventBusIndex:
'com.manafzar.mytaxi.driver.DriverEventBusIndex']
}
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'),
'proguard-rules.pro'
}
}
dataBinding {
enabled = true
}
}
dependencies {
annotationProcessor 'org.greenrobot:eventbus-annotation-processor:3.0.1'
api project(':model')
api 'com.google.maps.android:android-maps-utils:0.5'
api …Run Code Online (Sandbox Code Playgroud) 如果我们看一下gradle构建工具,我们会注意到不推荐使用编译配置依赖关系来支持api和实现.看到这里
所以我对使用api的依赖可见性提出了质疑.想象一下,我们在名为app的模块中设置了以下内容:
dependencies {
api 'commons-httpclient:commons-httpclient:3.1'
implementation 'org.apache.commons:commons-lang3:3.5'
}
Run Code Online (Sandbox Code Playgroud)
所以我收集的是org.apache.com:commons-lang3:3.5只能在模块本身中使用.但是commons-httpclient:commons-httpclient:3.1依赖将在模块之外可用,这实际意味着什么?这是否意味着如果我将我的app模块放入一个库中,依赖关系将对任何使用该库的人可用, (不管怎么说,总是这样吗?
这是Android文档关于api配置的说法:
api compile在编译时模块可以使用依赖项,并且在编译时和运行时它也可供模块的使用者使用.此配置的行为与compile(现在已弃用)类似,您通常只应在库模块中使用它.应用程序模块应使用实现,除非您要将其API公开给单独的测试模块.compileOnly提供