2

我开始了一个小型的概念验证练习,以使我们使用现有的基于 Gradle 的 Java 项目的Toothpick DI 框架。我已经阅读了很多声称您可以将 Toothpick 与 Java 一起使用(意思是 JRE、OpenJDK、JDK 或 JSE - 没有 Android)......但是,我能够检查/处理的每​​个示例在某些时候都有以某种方式对 Android 的依赖,形状或configuration.

到目前为止,最(部分)成功的努力是使用一个实验性的、一次性的 Android 模拟包来让我的 Java 项目至少编译没有错误。也就是说,解决任何应该生成的依赖项都是空白的,例如:

  • 生成MemberInjectorRegistry
  • 生成FactoryRegistry

Toothpick 示例项目本身和更简单的可用示例都使用 Android 配置,并且通常不依赖于其他 Android 细节。

更新二

我指导了Toothpick 示例项目,一个 Java 项目

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 项目可以在桌面或命令行上构建、调试和运行;就我的谷歌搜索而言,这似乎不是一个受欢迎的选择......

--

4

1 回答 1

1

您应该查看 TP 示例,它是纯 Java 的。

https://github.com/stephanenicolas/toothpick/tree/master/toothpick-sample

Smoothie 实际上是 TP 的 android 特定部分。

于 2018-06-01T03:39:05.360 回答