Использование инфраструктуры зубочистки DI для использования с проектом Java (только) - PullRequest
0 голосов
/ 31 мая 2018

Я начал небольшое подтверждение концепции , чтобы сделать из нас инфраструктуру DI Toothpick DI с существующим Java-проектом на основе Gradle.Я прочитал довольно много утверждений о том, что вы можете использовать Toothpick с Java (имеется в виду JRE, OpenJDK, JDK или JSE - без Android) ... Однако каждый пример, который я смог проверить / проработать, имеет в какой-то моментзависимость от Android в некотором роде, форма или configuration.

С наиболее успешными ( частично ) попытками до сих пор было использование экспериментального, одноразового пакета для насмешки Android, чтобы мой Java-проект по крайней мере компилировался без ошибок.Это сказало, что это появляется пустым при разрешении любых сгенерированных зависимостей, таких как:

  • сгенерированный MemberInjectorRegistry
  • сгенерированный FactoryRegistry

Сам пример проекта Toothpick и все более простые из доступных примеров используют конфигурацию Android и часто не зависят от других особенностей Android.

update Два

Я взял указание на Пример Toothpick проект, проект Java

Вики Tootpick и пример проекта используют опцию компиляции 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 ' там '.

update One

Я решил заняться этим с другого конца и взглянуть на распространенные примеры обработки аннотаций Java.Это работает, насколько я понял, с Gradle v 4.7 (а также, я думаю, v4.6).

В вашем (суб) проекте build.gradle ...

    plugins {
        id "net.ltgt.apt" version "0.15"
    }
       :

    dependencies {
         annotationProcessor (
             dep_toothpickCompiler
         )
       :
    }

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * dep_toothpickCompiler * * * * * * * * * * * * * * * *1079* * * * * * * * *

* * * *1088* 1083удалось создать папку

  • build/generated

К сожалению, пока нет сгенерированного вывода.Я уверен, в конце туннеля есть свет.Я буду публиковать обновления здесь, если / когда я подойду к решению .


учебным примерам (GitHub)

I 'Мы определили несколько «надежных» примеров зубочисток.Пока что они хотят, чтобы Android был в каком-то месте.Либо в качестве целевых модулей Android, либо с использованием связанных зависимостей.

Учитывая (или предполагая), что чистый проект Java / Toothpick можно создавать, отлаживать и запускать на рабочем столе или из командной строки;это не кажется популярным, поскольку мой поиск в Google пошел ...

-

1 Ответ

0 голосов
/ 01 июня 2018

Вы должны взглянуть на образец TP, это чистая Java.

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

Смузи на самом деле является специфичной для Android частью TP.

...