Android gradle java和Android子项目
我有一个多项目构建,其中一些模块是“纯java”模块,这些java模块输出的jar文件被发布。这些java模块依赖于android库生成的jar文件 有没有办法将android模块指定为java模块的依赖项 项目结构如下:Android gradle java和Android子项目,android,gradle,android-gradle-plugin,Android,Gradle,Android Gradle Plugin,我有一个多项目构建,其中一些模块是“纯java”模块,这些java模块输出的jar文件被发布。这些java模块依赖于android库生成的jar文件 有没有办法将android模块指定为java模块的依赖项 项目结构如下: Root | JavaModule | build.gradle | AndroidModule | build.gradle JavaModule的build.gradle是: apply plugin:'jav
Root
|
JavaModule
|
build.gradle
|
AndroidModule
|
build.gradle
JavaModule
的build.gradle
是:
apply plugin:'java'
dependencies{
compile project(:AndroidModule)
}
apply plugin:'android-library'
AndroidModule
的build.gradle
是:
apply plugin:'java'
dependencies{
compile project(:AndroidModule)
}
apply plugin:'android-library'
如上所述添加依赖项不起作用,java模块无法在AndroidModule中找到符号
我想问题在于AndroidModule生成了一个aar
文件,而java插件不理解这个文件
作为构建的一部分,AndroidModule
生成classes.jar
。有没有办法指定对这个classes.jar
文件的依赖关系?您已经正确地确定需要引用Android库项目的jar输出。有两种方法可以做到这一点
人工进近
只需将jar
文件复制到父项目中,并像从Android项目中一样引用它们:
compile fileTree(dir: 'libs', include: ['*.jar'])
i、 例如,在项目中创建一个libs
文件夹,只需将jar放入其中。根据这些库的易变性,这可能是最简单也是最简单的方法
马文方法
如果您的库不断变化,那么手动复制jar很快就会很痛苦。当然,您可以使用一些脚本来实现自动化,但更好的解决方案是将JAR部署到本地Maven存储库。这可以通过标准的maven publish
Gradle插件实现。然后,您将像从Maven central引用依赖项一样引用这些依赖项,即:
dependencies {
compile 'com.your.module:1.0.+@jar'
}
在此设置中,您构建每个库并将jar发布到您自己机器上的本地maven repo(例如),然后设置任何相关项目从那里下载二进制文件。好奇-如果这些“java”模块仍然依赖于Android库,为什么不将其设为“Android库”模块?我们有一个遗留项目,这个项目必须作为“纯java”模块发布。谢谢你的建议。如何自动将classes.jar
复制到顶级目录?根据构建风格(assembly
,assembleDebug
,assembleRelease
)到类.jar的路径不同。我可以枚举所有的构建类型,然后添加一个doLast
部分来复制classes.jar
,但这对我来说似乎是一种攻击。我必须求助于黑客还是有一种优雅的方式来指定依赖关系?