【发布时间】:2018-05-30 21:30:49
【问题描述】:
我开始了一个小型概念验证练习,让我们了解Toothpick DI framework 与现有的基于 Gradle 的 Java 项目。我已经阅读了很多声称您可以将 Toothpick 与 Java 一起使用(意思是 JRE、OpenJDK、JDK 或 JSE - 没有 Android)......但是,我能够检查/处理的每个示例在某些时候都有以某种方式对 Android 的依赖,形状或 configuration。
到目前为止,最(部分)成功的努力是使用一个实验性的、一次性的 Android 模拟包来让我的 Java 项目至少可以无错误地编译。也就是说,它在解决任何应该生成的依赖项时都是空白的,例如:
- 生成
MemberInjectorRegistry - 生成
FactoryRegistry
Toothpick 示例项目本身和更简单的可用示例都使用 Android 配置,并且通常不依赖于其他 Android 细节。
更新二
我指导Toothpick sample 项目,一个Java 项目
Tootpick wiki 和示例项目使用 Java 编译选项:
compileJava {
options.annotationProcessorPath = configurations.annotationProcessor
options.compilerArgs = ['-Atoothpick_registry_package_name=experiments.toothpick',]
}
这给了我一个警告,结果证明是 Gradle 和插件不匹配。我需要一个带有--refresh-dependencies 的新版本(提示:确保你编译了 TestsPackages)。
修复样本后编译并通过单元测试。生成的文件在build/generated 下,我设法鼓励 Netbeans 用这个find它们:
sourceSets {
generated {
java {
srcDirs = [ 'build/generated/source/apt/main' ];
}
}
}
遗憾的是,Netbeans 继续在生成的符号下方添加小红线。至少它运行。 Netbeans 支持可能会更好。
我之前的实验是在 Toothpick Smoothie 上进行的,这是一个 Android 示例。作为一种智力锻炼有点有趣......
build.gradle 文件依赖于 Android。所以我尝试用模拟替代品来代替缺失的组件。项目编译但找不到 (any) 生成的代码。
我现在会考虑可能至少有一个成功的 Java JRE/JDK Toothpick 项目示例'在那里'。
更新一个
我决定从另一端解决这个问题,并查看常见的 Java 注释处理示例。据我所知,这适用于 Gradle v4.7(我认为也是 v4.6)。
在您的(子)项目中build.gradle ...
plugins {
id "net.ltgt.apt" version "0.15"
}
:
dependencies {
annotationProcessor (
dep_toothpickCompiler
)
:
}
dep_toothpickCompiler 前面定义为:
// Annotation Processor
dep_toothpickCompiler = "com.github.stephanenicolas.toothpick:toothpick-compiler:${ver_toothpick}"
结果 ...
这一步至少设法创建了一个
-
build/generated文件夹
很遗憾,到目前为止还没有生成输出。我敢肯定,隧道尽头有光。如果/当我接近一个解决方案时,我会在这里发布更新。
学习示例(GitHub)
我发现了一些“可靠”的牙签示例。到目前为止,他们希望 Android 出现在某个地方。作为 Android 目标模块或使用相关依赖项。
- https://github.com/davidbcn/ToothpickWorkshop
- https://github.com/WarrenFaith/Toothpick-Sample
- https://github.com/wongcain/okuki
- https://github.com/search?l=Java&q=toothpick&type=Repositories
假设(或假设)纯 Java / Toothpick 项目可以在桌面或命令行上构建、调试和运行;就我的谷歌搜索而言,这似乎不是一个受欢迎的选择......
--
【问题讨论】:
标签: java gradle dependency-injection annotation-processing toothpick-di