我有一个Android项目,该项目定义了各种通过协议缓冲区序列化的数据类型.我希望有一个单独的Java项目,该项目能够在服务器上反序列化这些数据类型.
我的项目结构如下:
AndroID library - Data - TypeA - TypeB - ...Java Server - Parser (depends on .Data)
在此示例中,数据包中的所有类都自行处理封送处理.
尝试构建Java Server时,它成功编译了AndroID项目,但最终失败,并显示Gradle无法找到引用的软件包.
注意,如果仅引入其他Java库,那么我可以成功构建具有跨项目依赖关系的Java Server,这使我相信这是Java->. AndroID依赖问题,而不是Gradle配置问题.
我考虑过的可能解决方案是从AndroID项目中提取所有这些数据类型,并将它们放在单独的Java库中.但是,这样做的麻烦在于,其中某些类仅提供了将AndroID特定类(SensorEvent,Location等)转换为可与ProtoBuf一起使用的类型的方法.我一直在考虑的一种解决方案如下所示:
Data Types - TypeA - TypeB - ...AndroID library - Data - AndroIDTypeA (Class with AndroID Specific constructor that can be cast to the parent type) - AndroIDTypeB - ...Java Server - Parser ( Depends on the Data Types module )
尽管这确实可以解决我的问题,但它似乎并不是最佳解决方案.
有没有办法单独通过Gradle完成此任务?
作为参考,这里是我的build.gradle文件的缩写版本.
AndroID库:
apply plugin: 'com.androID.library'androID { compileSdkVersion 21 buildToolsversion "21.0.2" defaultConfig { applicationID "com.foo.bar.androIDlib" ... } buildTypes { release { runProguard false proguardfiles getDefaultProguardfile('proguard-androID.txt'), 'proguard-rules.pro' } }}dependencIEs { compile filetree(dir: 'libs', include: ['*.jar']) ... compile 'com.Google.protobuf:protobuf-java:2.6.1'}
Java服务器:
apply plugin: 'java'dependencIEs { compile filetree(dir: 'libs', include: ['*.jar']) compile 'com.Google.protobuf:protobuf-java:2.6.1' compile project(':androIDlib')}
编辑:
特别是Gradle会出现以下错误:
error: package com.foo.bar.androIDlib does not exist
解决方法:
在Gradle中,您不能拥有依赖于AndroID库的Java库.这是因为Gradle中的AndroID插件不基于Java插件,并且与Java插件不兼容,因此Java无法理解其源集,否则无法很好地使用它.
我认为您不能仅通过Gradle配置解决此问题,即使可以,也可能会使您的构建异常复杂和脆弱.最好的选择是让Java东西仅依赖Java东西,隔离那里常见的protobuf依赖关系,并使AndroID端依赖Java.您概述了使用某些类的AndroID版本的方法.可能行得通,但是我不知道您要采取何种行动来对此进行详细评论,所以没有足够的细节.
总结以上是内存溢出为你收集整理的构建依赖于Android Project Gradle的Java库全部内容,希望文章能够帮你解决构建依赖于Android Project Gradle的Java库所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)