Android gradle java和Android子项目

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

我有一个多项目构建,其中一些模块是“纯java”模块,这些java模块输出的jar文件被发布。这些java模块依赖于android库生成的jar文件

有没有办法将android模块指定为java模块的依赖项

项目结构如下:

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
,但这对我来说似乎是一种攻击。我必须求助于黑客还是有一种优雅的方式来指定依赖关系?