Євг*_*вич 5 dependencies android android-gradle-plugin
我正在使用最新的Android Studio 3.0.0-beta6来构建我的Android项目,并且存在此依赖项问题。
Gradle鼓励我compile's用implementation's。这是我的项目结构:
项目:
模块1
Module1取决于某些库,module2取决于module1。但是,来自module1的库在module2中不可见。我不想复制粘贴依赖项,而是只将库依赖项声明一次。有一个简单的解决方案吗?谢谢。
module1的构建包:
dependencies {
....
implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'
...
}
Run Code Online (Sandbox Code Playgroud)
module2的构建包:
implementation project(':module1')
Run Code Online (Sandbox Code Playgroud)
在您的Root Project-> build.gradle中,您应该具有以下内容:
allprojects {
repositories {
jcenter()
}
}
Run Code Online (Sandbox Code Playgroud)
在这里添加依赖项!!
更新
如果您不希望所有模块都具有公共依赖性,而只希望特定模块,则可以执行以下操作:
在此文件夹中创建一个.gradle文件(例如gradleScript / dependencies.gradle),如下所示:
ext {
//Version
supportLibrary = '22.2.1'
//Support Libraries dependencies
supportDependencies = [
design : "com.android.support:design:${supportLibrary}",
recyclerView : "com.android.support:recyclerview-v7:${supportLibrary}",
cardView : "com.android.support:cardview-v7:${supportLibrary}",
appCompat : "com.android.support:appcompat-v7:${supportLibrary}",
supportAnnotation: "com.android.support:support-annotations:${supportLibrary}",
]
}
Run Code Online (Sandbox Code Playgroud)在您的根项目build.gradle中添加以下行:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.2.3'
}
}
// Load dependencies
apply from: 'gradleScript/dependencies.gradle'
Run Code Online (Sandbox Code Playgroud)在模块中相应地添加以下内容:
// Module build file
dependencies {
//......
compile supportDependencies.appCompat
compile supportDependencies.design
}
Run Code Online (Sandbox Code Playgroud)希望这可以帮助!!!
老问题,但在我看来,您所追求的只是在您的 gradle 文件中使用api而不是使用implementation?
如果模块 X 声明了一个api依赖项,它可以传递给依赖于 X 的任何其他模块。但是implementation,如果它声明了一个依赖项,则该依赖项中的类将放在模块 X 的类路径上,但不适用于任何模块依次依赖在模块 X 上。
从 Gradle 的文档:
api 配置中出现的依赖项将传递给库的使用者,因此将出现在使用者的编译类路径上。另一方面,在实现配置中发现的依赖项不会暴露给消费者,因此不会泄漏到消费者的编译类路径中。
所以具体来说:
模块一:
dependencies {
....
api 'io.reactivex.rxjava2:rxandroid:2.0.1'
api 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'
...
}
Run Code Online (Sandbox Code Playgroud)
模块二:
implementation project(':module1')
Run Code Online (Sandbox Code Playgroud)
这不是您想要做的最简单的解决方案吗?
| 归档时间: |
|
| 查看次数: |
2080 次 |
| 最近记录: |