我开始了一个小的概念证明练习,以使用现有的基于Gradle的Java项目来使Toothpick DI framework成为现实。我已经读过很多关于可以在Java中使用Toothpick的主张(意味着JRE,OpenJDK,JDK或JSE-没有Android)...但是,我能够检查/处理的每个示例在某个时候都有一个对Android的依赖(形状或configuration
)。
到目前为止,最大(部分)成功的尝试是使用一个实验性的,废弃的Android模拟程序包,以使我的Java项目至少可以正确编译。也就是说,在解决任何应生成的依赖项时,它变成空白,例如:
MemberInjectorRegistry
FactoryRegistry
Toothpick示例项目本身以及可用示例中的更简单示例均使用Android配置,并且通常不依赖于其他Android细节。
更新两个
我指导了Java项目Toothpick sample项目
Tootpick Wiki和示例项目使用Java编译选项:
compileJava {
options.annotationProcessorPath = configurations.annotationProcessor
options.compilerArgs = ['-Atoothpick_registry_package_name=experiments.toothpick',]
}
那给了我一个警告,结果是Gradle和插件不匹配。我需要一个带有
--refresh-dependencies
的新版本(提示:请确保您编译了TestsPackages)。修复后,样本将编译并通过单元测试。生成的文件位于
build/generated
下,我设法鼓励Netbeans使用以下文件找到它们: sourceSets {
generated {
java {
srcDirs = [ 'build/generated/source/apt/main' ];
}
}
}
不幸的是,Netbeans继续在生成的符号下放置一些红线。至少它运行。 Netbeans支持可能会更好。
我之前的实验着眼于Toothpick
Smoothie
,这是一个Android示例。作为一种智力练习,有点有趣...该
build.gradle
文件依赖于Android。因此,我尝试使用模拟替代品来缺少组件。该项目可以编译,但是找不到(任何)生成的代码。到现在为止,我会考虑至少有一个成功的Java JRE / JDK Toothpick项目示例“在那里”。
更新一个
我决定从另一端解决此问题,并查看常见的Java注释处理示例。就Gradle v 4.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目标模块,也可以使用相关的依赖项。
假定(或假设)一个纯Java / Toothpick项目可以在桌面上或从命令行构建,调试和运行;就我的谷歌搜索而言,这似乎不是一个受欢迎的选择...
-
最佳答案
您应该看一下TP示例,它是纯Java。
https://github.com/stephanenicolas/toothpick/tree/master/toothpick-sample
冰沙实际上是TP的android特定部分。