【问题标题】:Using the Toothpick DI framework be used with a Java (only) project将 Toothpick DI 框架与 Java(仅限)项目一起使用
【发布时间】: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 目标模块或使用相关依赖项。

假设(或假设)纯 Java / Toothpick 项目可以在桌面或命令行上构建、调试和运行;就我的谷歌搜索而言,这似乎不是一个受欢迎的选择......

--

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 是的,我明白了。找到Toothpick sample ...我在构建时带有此警告:Task :plumbing:compileJava FAILED warning: The following options were not recognized by any processor: '[toothpick_registry_package_name]'。我怀疑 Toothpick 示例是否会构建为子项目,因为主项目是 Android 项目。
    • 如您所见,一旦解决了依赖项和插件,它最终会作为一个单独的项目工作。如果有人有一个“fix”让 netbeans 将生成的代码包含在语法检查中,我会很感兴趣。
    • 语法检查是什么意思?事实上,TP 在这个级别的行为不应与任何其他生成代码的注释处理器不同。
    • 嗨,AspectJ 和 Dagger 有同样的问题——这是一个关于 Netbeans 的事情。 Ant 构建有一个选项可以绕过它。 Lombok 似乎还可以,但他们将代码放在与内存不同的位置(??)。重要的是它工作正常。
    猜你喜欢
    • 2017-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-01
    • 2017-04-26
    • 1970-01-01
    相关资源
    最近更新 更多