我有一小组图书馆和应用程序:
forge-base
- java项目(Intellij IDEA项目)forge-android
- android库项目,取决于forge-base
(AS项目)forge-android-skeleton
- 示例Android应用,取决于forge-android
(AS项目)在初始开发期间,我使用了具有项目依赖性的结构,如:
settings.gradle:
...
include ':forge-base'
project(':forge-base').projectDir=new File("$settingsDir/../forge/base")
...
然后在build.gradle中:
compile project(':forge-base')
这就像一个魅力,但后来我需要在maven repo上发布libs,并且必须改变依赖关系:
的build.gradle:
compile 'com.bolyartech.forge:forge-base:2.0-SNAPSHOT'
我现在面临的问题是我试图在所有3个项目中进行一些重大的重构,我需要旧的deps结构,以便轻松确认项目的一致性,例如:仅构建skeleton
应用程序,并自动进行所有递归重新编译/构建(就像使用compile project(':forge-base')
引用lib项目时那样)。如果我使用'new'结构发布到(本地)maven,我必须每次都发布lib(增加版本)我在其中更改一些内容,以便其他两个项目可以看到更改。
通常/规范为什么要处理这样的情况?
是否有一种简单的方法可以在两种“模式”之间切换,例如'内部'/'外部'依赖?
答案 0 :(得分:1)
事实证明这很容易做到。您可以对不同的构建类型使用不同的依赖项,例如调试/发布,例如对于我的forge-android-skeleton
项目,我现在有以下内容:
settings.gradle
中的:
include ':app'
include ':forge-base' project(':forge-base').projectDir=new
File("$settingsDir/../../../forge/base")
include ':forge-android' project(':forge-android').projectDir=new
File("$settingsDir/../../../forge-android/forge-android")
app/build.gradle
中的:
...
releaseCompile ('com.bolyartech.forge:forge-android:2.7-SNAPSHOT')
debugCompile project(':forge-android')
...
请注意,在settings.gradle
中,您需要将所有依赖项都放回到底部,否则它将无效(这就是forge-base
定义的原因,即使没有明确使用)。
您还可以定义另一种构建类型,例如direct-deps
,并在您不想使用调试/发布类型时使用它。
请注意,如果您为某些项目(例如我的IDEA和AS)使用不同的IDE,可能最好确保两者都使用相同(版本)gradle,否则可能会出现意外问题