我开始了一个小的概念证明练习,以使用现有的基于Gradle的Java项目来使Toothpick DI framework成为现实。我已经读过很多关于可以在Java中使用Toothpick的主张(意味着JRE,OpenJDK,JDK或JSE-没有Android)...但是,我能够检查/处理的每​​个示例在某个时候都有一个对Android的依赖(形状或configuration)。

到目前为止,最大(部分)成功的尝试是使用一个实验性的,废弃的Android模拟程序包,以使我的Java项目至少可以正确编译。也就是说,在解决任何应生成的依赖项时,它变成空白,例如:

  • 生成的MemberInjectorRegistry
  • 生成的FactoryRegistry

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

    更新两个

    我指导了Java项目Toothpick sample项目
  • https://github.com/stephanenicolas/toothpick/tree/master/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示例。作为一种智力练习,有点有趣...
  • Smoothie sample

  • 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目标模块,也可以使用相关的依赖项。
  • 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项目可以在桌面上或从命令行构建,调试和运行;就我的谷歌搜索而言,这似乎不是一个受欢迎的选择...

    -

    最佳答案

    您应该看一下TP示例,它是纯Java。

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

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

    09-30 23:26