我开始一个中型项目,其中包含许多可以在 Android 或 JVM 上运行的独立组件,我想知道如何将它分解为 SBT 项目,以便依赖项表现得很好。这是我到目前为止所得到的:
core/ 用于平台无关的核心代码,不能在任何一个平台上中断,这包括组件启动器的接口
android-core/ 用于实现依赖于 android 库的核心接口(注意,这个项目依赖于sbt-android)
jvm-core/ 用于实现依赖于不能很好地使用或依赖于 android 的库的核心接口
到目前为止一切顺利,但现在是时候在各个组件中使用核心项目了。我的要求是:
- 每个组件都应该编译成一个单独的 Android 应用程序(可能共享一个 aar 库?),并且可以单独安装应用程序(仍然通过 sbt,一个 android:install 任务)
- 有一个包装器构建,因此所有项目构建都可以在同一个地方完成。
- 它非常容易扩展,以至于刚毕业的学生可以正确添加组件(如果添加组件不需要对构建进行任何更改,则可以加分)。
- 如果一个组件依赖于一个特定于平台的库,它不会阻止其他组件被不可知地编译。
我的一些问题是:
- 每个组件都应该有一个 sbt 项目吗?(我倾向于这样认为,以便学生可以添加对不在两个平台上运行的库的依赖项,但我愿意犯错)
- 如果是这样,每个组件的项目都需要一个 sbt 构建吗?
- 如果是这样,我如何引导组件构建以要求组件作者具备最低技能?
- 稍后我将添加代码生成以从描述中生成消息类(想想 protobuf/thrift),这将希望在组件编译之前作为第一遍运行,我假设这可以完成,但是你呢有一个解释如何的链接?
- 如果两个组件都针对彼此的消息进行编译,是否会产生不可能的循环依赖?
基本上,我正在寻找智慧和经验,我确信一旦我知道要搜索文档以理解哪些术语以及整个事情想要如何组合在一起,我就可以破解我的方式。谢谢你的帮助!