使用Toothpick DI框架与Java(仅)项目

时间:2018-05-30 21:30:50

标签: java gradle dependency-injection annotation-processing toothpick-di

我开始了一个小的概念证明练习,使我们使用现有的基于Gradle的Java项目来Toothpick DI framework。我已经阅读了很多声称你可以使用Toothpick with 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 找到它们:

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

-

1 个答案:

答案 0 :(得分:1)

你应该看看TP样本,它是纯Java。

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

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