我有两个以下Android Studio项目,结构如下:
projectA/
├----build.gradle
├----settings.gradle
├----bluewhale/
├----krill/
projectA settings.gradle文件:include 'bluewhale', 'krill'
projectB/
├----build.gradle
├----settings.gradle
├----hello/
├----krill/
projectB settings.gradle文件:include 'hello', 'krill'
您可以看到“projectA”和“projectB”包含相同的模块“krill”。实际上,这是一个图书馆项目。
我的问题是:如何在Gradle中重用子模块“krill”?我不想在每个项目中包含相同的“磷虾”副本
期待您的回复!谢谢!
答案 0 :(得分:0)
如果您有一个在多个项目中使用的子模块,您应该考虑将其提取到单独的项目中。然后,您可以从中创建一个依赖项,并将其包含在dependencies
部分的两个项目中。
如果您只使用本地计算机进行开发,而没有任何自定义存储库,最好的方法可能是使用mavenLocal()
存储库。您可以使用maven publish plugin将jar发布到本地maven存储库中。它应该像添加到新的 krill :
apply plugin: 'maven'
apply plugin: 'maven-publish'
publishing {
publications {
maven(MavenPublication) {
from components.java
artifact sourceJar {
classifier "sources"
}
}
}
}
repositories {
mavenLocal()
}
您可能想要设置组和工件ID。有关详细信息,请参阅the documentation。
你也可以在其中一个项目中保留 krill ,比如ProjectA,如果它与它有某种关系的话。然后在 krill 子模块中设置maven发布。您还可以通过运行gradle :krill:publishToMavenLocal
将其发布到maven local,然后将其用作ProjectB中的依赖项。
另一种选择是将子模块保存在projectA和projectB树之外,并使用以下内容添加它:
include("krill")
project(":krill") {
projectDir = new File("$settingsDir/../krill")
}
但是我不能推荐这个,因为它很hacky,你的IDE也可能有问题。
最后可能的做法是从 krill 项目所在的目录创建符号链接到ProjectA和ProjectB。但这是一个非常糟糕的想法,例如当您使用版本控制时。
答案 1 :(得分:0)
最后我在这里找到了一篇文章:an-alternative-multiproject-setup-for-android-studio。它非常适合我!
它向我们展示了与Google的Gradle Plugin user guide recommends
不同的另一种方式 以下示例代码:(将此脚本添加到项目settings.gradle
文件中)
include ':krill'
project(':krill').projectDir = new File('../otherProject/krill')
以下项目结构:
RootFolder/
├----projectA/
│ ├----build.gradle
│ ├----settings.gradle
│ └----bluewhale/
│
├----projectB/
│ ├----build.gradle
│ ├----settings.gradle
│ └----hello/
│
└----otherProject/
├----krill/
│ └----build.gradle
│
└----otherModule/
└----build.gradle
有关详细信息,请访问gradle官方文档:Multi Project Builds