// ĠImports : Ċ import Ġkotlin . text . Charsets . UTF _ 8 Ċ Ċ // ĠBoth Ġ' group ' Ġand Ġ' version ' Ġare Ġdefault ĠGradle Ġproperties , Ġso Ġthey Ġneed Ġto Ġbe Ġset Ġhere Ċ group Ġ= Ġ" com . j ord ij as pers " Ċ version Ġ= Ġ" 0 . 0 . 1 - SNAPSHOT " Ċ Ċ // ĠOther , Ġnon - default ĠGradle , Ġproperties Ġneed Ġto Ġbe Ġdefined Ġhere Ċ val Ġartifact Name Ġ= Ġ" web flux - api - annotations " Ċ val Ġartifact Description Ġ= Ġ" experiment ing Ġwith ĠSpring ĠWeb Flux " Ċ var Ġvendor Ġ= Ġ" j ord i - jas pers " Ċ val Ġuser Ġ= Ġnull Ċ val Ġpwd Ġ= Ġnull Ċ Ċ plugins Ġ{ Ċ ĉ // ĠPretty Ġobvious Ġwhy Ġthis Ġis Ġneeded . Ċ ĉ java ĊĊ ĉ // ĠQuality Ġplugin Ġfor Ġcheck style . Ċ ĉ check style ĊĊ ĉ // ĠQuality Ġplugin Ġfor ĠP MD . Ċ ĉ pmd ĊĊ ĉ // ĠAdds Ġint elli J Ġtasks Ġto Ġthe Ġbuild Ġfile Ġand Ġcreates Ġthe Ġsettings Ġin Ġint ellij Ġcorrectly Ċ ĉ idea ĊĊ ĉ // ĠOur Ġtests Ġare Ġusing Ġgro ovy Ġwith Ġthe Ġspo ck Ġframework , Ġthis Ġadds Ġthe Ġcompile Test Gro ovy Ġtask Ġand Ġthe Ġwatch Ġto Ġthe Ġtest / groovy Ġfolder Ċ ĉ groovy ĊĊ ĉ // Ġembedded Ġjava Ġcode Ġcoverage Ġby Ġtesting , Ġformer ly Ġknown Ġas ĠE cl Em ma . Ċ ĉ jac oco ĊĊ ĉ // ĠThe Ġspring Ġboot Ġplugin Ġreact s Ġto Ġother Ġplugins Ġsuch Ġas Ġthe Ġjava Ġplugin . Ċ ĉ // ĠIn Ġcase Ġdependency Ġmanagement Ġis Ġalso Ġavailable , Ġthe ĠSpring ĠBill ĠOf ĠMaterial s Ġwill Ġbe Ġinjected Ġcontaining Ġversions Ġof Ġspring Ġlibraries . Ċ ĉ // Ġsee Ġhttps :// docs . spring . io / spring - boot / docs / current / gradle - plugin / reference / html / Ċ ĉ id (" org . springframework . boot ") Ġversion Ġ" 2 . 6 . 2 " ĊĊ ĉ // Ġthis Ġplugin Ġadds Ġthe Ġintegration Ġtest Ġtask Ġto Ġour Ġbuild Ġfile Ġwith Ġthe Ġdefault Ġ' it est ' Ġdirectory . Ċ ĉ // Ġsee Ġhttps :// github . com / S of te q / it est - gradle - plugin Ċ ĉ id (" com . sof te q . gradle . it est ") Ġversion Ġ" 1 . 0 . 4 " ĊĊ ĉ // Ġnon Ġstandard Ġplugins Ġquality Ġplugins Ġfor Ġgradle Ċ ĉ id (" com . github . spot bugs ") Ġversion Ġ" 4 . 7 . 2 " ĊĊ ĉ // ĠThe Ġproject - report Ġplugin Ġprovides Ġfile Ġreports Ġon Ġdependencies , Ġtasks , Ġetc . Ċ ĉ // ĠSee Ġhttps :// docs . gradle . org / current / user guide / project _ report _ plugin . html . Ċ ĉ id (" project - report ") ĊĊ ĉ // ĠDependency Ġmanagement Ġplugin . Ċ ĉ // ĠThe ĠSpring ĠBoot Ġplugin âĢĻ s Ġdependency Ġon Ġthe Ġdependency Ġmanagement Ġplugin Ġmeans Ġthat Ġyou Ġcan Ġuse Ġthe Ġdependency Ġmanagement Ġplugin Ċ ĉ // Ġwithout Ġhaving Ġto Ġdeclare Ġa Ġdependency Ġon Ġit . ĠThis Ġalso Ġmeans Ġthat Ġyou Ġwill Ġautomatically Ġuse Ġthe Ġsame Ġversion Ġof Ġthe Ċ ĉ // Ġdependency Ġmanagement Ġplugin Ġas ĠSpring ĠBoot Ġuses . Ċ ĉ // ĠNOTE : ĠĠ ĠEach ĠSpring ĠBoot Ġrelease Ġis Ġdesigned Ġand Ġtested Ġagainst Ġa Ġspecific Ġset Ġof Ġthird - party Ġdependencies . ĠOver riding Ġversions Ġmay Ġcause Ċ ĉ // ĠĠĠĠĠĠĠĠ Ġcompatibility Ġissues Ġand Ġshould Ġbe Ġdone Ġwith Ġcare . Ċ ĉ id (" io . spring . dependency - management ") Ġversion Ġ" 1 . 0 . 1 1 . RELEASE " Ċ } Ċ Ċ /** Ċ Ġ* ĠSetting Ġthe Ġmetadata Ġfor Ġthe Ġproject . Ċ Ġ*/ Ċ spring Boot Ġ{ Ċ ĉ build Info Ġ{ Ċĉ ĉ properties Ġ{ Ċĉĉ ĉ artifact Ġ= Ġartifact Name Ċĉĉ ĉ version Ġ= Ġproject . version . toString () Ċĉĉ ĉ group Ġ= Ġproject . group . toString () Ċĉĉ ĉ name Ġ= Ġartifact Description Ċĉ ĉ } Ċ ĉ } Ċ } Ċ Ċ /** Ċ Ġ* ĠJava Ġ 1 7 Ġis Ġlong Ġterm Ġsupported Ġand Ġtherefore Ġchosen Ġas Ġthe Ġdefault . Ċ Ġ*/ Ċ java Ġ{ Ċ ĉ source Compatibility Ġ= ĠJava Version . VERSION _ 1 7 Ċ ĉ target Compatibility Ġ= ĠJava Version . VERSION _ 1 7 Ċ } ĊĊ Ċ /** Ċ Ġ* ĠThe Ġrepositories Ġused Ġto Ġdownload Ġthe Ġdependencies . Ċ Ġ*/ Ċ repositories Ġ{ Ċ ĉ maven Local () Ċ ĉ maven Central () Ċ } Ċ Ċ dependencies Ġ{ Ċ ĉ // Ġ======= ĠCOMPI LE ĠONLY ĠDE PEND ENCI ES Ġ======= ĊĊ ĉ // ĠThis Ġbrings Ġin Ġthe ĠSup press FB Warnings Ċ ĉ compile Only ( group Ġ= Ġ" com . github . spot bugs ", Ġname Ġ= Ġ" spot bugs - annotations ", Ġversion Ġ= Ġ" 4 . 3 . 0 ") ĊĊ ĉ // Ġ======= ĠIMP LEMENT ATION ĠDE PEND ENCI ES Ġ======= ĊĊ ĉ // ĠSt arter Ġfor Ġusing ĠMongoDB Ġdocument - oriented Ġdatabase Ġand ĠSpring ĠData ĠMongoDB ĠReactive Ċ ĉ implementation ( group Ġ= Ġ" org . springframework . boot ", Ġname Ġ= Ġ" spring - boot - starter - data - mongodb - reactive ", Ġversion Ġ= Ġ" 2 . 6 . 2 ") ĊĊ ĉ // ĠSt arter Ġfor Ġbuilding ĠWeb Flux Ġapplications Ġusing ĠSpring ĠFramework 's ĠReactive ĠWeb Ġsupport Ċ ĉ implementation ( group Ġ= Ġ" org . springframework . boot ", Ġname Ġ= Ġ" spring - boot - starter - web flux ", Ġversion Ġ= Ġ" 2 . 6 . 2 ") Ċ ĉ implementation ( group Ġ= Ġ" org . springframework ", Ġname Ġ= Ġ" spring - web flux ", Ġversion Ġ= Ġ" 5 . 3 . 1 5 ") ĊĊ ĉ // Ġmap struct Ġis Ġused Ġto Ġgenerate Ġcode Ġto Ġmap Ġfrom Ġdomain Ġmodel Ġclasses Ġto Ġrest Ġapplication Ġmodel Ġclasses Ċ ĉ implementation ( group Ġ= Ġ" org . map struct ", Ġname Ġ= Ġ" map struct ", Ġversion Ġ= Ġ" 1 . 4 . 2 . Final ") Ċ ĉ annotation Processor ( group Ġ= Ġ" org . map struct ", Ġname Ġ= Ġ" map struct - processor ", Ġversion Ġ= Ġ" 1 . 4 . 2 . Final ") ĊĊ ĉ // ĠAn Ġembedded Ġmongodb Ġdependency . Ċ ĉ implementation ( group Ġ= Ġ" de . fl ap do od le . embed ", Ġname Ġ= Ġ" de . fl ap do od le . embed . mongo ", Ġversion Ġ= Ġ" 3 . 2 . 8 ") ĊĊ ĉ // ĠLog stash Ġencoder Ġfor Ġlogging Ġin ĠJSON Ġformat Ċ ĉ implementation ( group Ġ= Ġ" net . logstash . log back ", Ġname Ġ= Ġ" logstash - log back - encoder ", Ġversion Ġ= Ġ" 6 . 3 ") ĊĊ ĉ // ĠNet ty Ġis Ġan Ġasynchronous Ġevent - driven Ġnetwork Ġapplication Ġframework Ġfor Ġrapid Ġdevelopment Ġof Ġmaintain able Ġhigh Ġperformance Ġprotocol Ġservers Ġ& Ġclients . Ċ ĉ implementation (" io . project reactor . netty : reactor - netty : 1 . 0 . 1 5 ") ĊĊĊ ĉ // ĠGeneral Ġdata - binding Ġfunctionality Ġfor ĠJack son : Ġworks Ġon Ġcore Ġstreaming ĠAPI Ċ ĉ implementation ( group Ġ= Ġ" com . fasterxml . jackson . core ", Ġname Ġ= Ġ" jackson - databind ", Ġversion Ġ= Ġ" 2 . 1 3 . 1 ") ĊĊ ĉ // Ġcontains Ġthe Ġauto configuration Ġfor ĠH awai i Ġlogging . Ċ // ĉ implementation ( group Ġ= Ġ" org . h awai iframe work ", Ġname Ġ= Ġ" h awai i - starter - logging ", Ġversion Ġ= Ġ" 3 . 0 . 0 . M 2 3 ") ĊĊ ĉ // Ġprovides Ġthe Ġcore Ġof Ġh awai i Ġframework Ġsuch Ġas Ġthe Ġresponse Ġentity Ġexception Ġhandling . Ċ // ĉ implementation (" org . h awai iframe work ", Ġname Ġ= Ġ" h awai i - core ", Ġversion Ġ= Ġ" 3 . 0 . 0 . M 2 3 ") ĊĊ ĉ // Ġprovides Ġan Ġasync Ġframework Ġwhich Ġenables Ġus Ġto Ġcontrol Ġquery Ġand Ġrest Ġendpoints Ġtimeouts . Ċ // ĉ implementation (" org . h awai iframe work ", Ġname Ġ= Ġ" h awai i - async ", Ġversion Ġ= Ġ" 3 . 0 . 0 . M 2 3 ") ĊĊ ĉ // Ġcontains Ġthe Ġauto configuration Ġof Ġthe Ġexception Ġmapping Ġto Ġhttp Ġerror Ġcodes . Ċ // ĉ implementation ( group Ġ= Ġ" org . h awai iframe work ", Ġname Ġ= Ġ" h awai i - starter - rest ", Ġversion Ġ= Ġ" 3 . 0 . 0 . M 2 3 ") ĊĊ ĉ // Ġ======= ĠTEST ĠDE PEND ENCI ES Ġ======= ĊĊ ĉ // ĠTo Ġhave Ġthe Ġ@ SpringBootTest Ġannotation Ċ ĉ test Implementation ( group Ġ= Ġ" org . springframework . boot ", Ġname Ġ= Ġ" spring - boot - starter - test ", Ġversion Ġ= Ġ" 2 . 6 . 2 ") Ġ{ Ċĉ ĉ exclude ( group Ġ= Ġ" com . vaadin . external . google ") Ċ ĉ } ĊĊ ĉ // Ġdue Ġto Ġthe Ġdependency Ġto Ġspo ck , Ġwe Ġalso Ġneed Ġgro ovy Ċ ĉ test Implementation ( group Ġ= Ġ" org . codehaus . groovy ", Ġname Ġ= Ġ" groovy - all ", Ġversion Ġ= Ġ" 3 . 0 . 8 ") ĊĊ ĉ // Ġwww . sp ock framework . org Ġis Ġthe Ġgro ovy Ġbased Ġtest Ġframework Ġproviding Ġthe Ġspecifications Ġfor Ġour Ġtests . Ċ ĉ test Implementation ( group Ġ= Ġ" org . sp ock framework ", Ġname Ġ= Ġ" sp ock - core ", Ġversion Ġ= Ġ" 2 . 1 - M 2 - groovy - 3 . 0 ") ĊĊ ĉ // ĠS po ck ĠSpring Ġbindings Ċ ĉ // ĠSee Ġhttps :// docs . spring . io / spring - boot / docs / current / reference / html / spring - boot - features . html # boot - features - testing - spring - boot - applications - with - sp ock Ċ ĉ test Implementation ( group Ġ= Ġ" org . sp ock framework ", Ġname Ġ= Ġ" sp ock - spring ", Ġversion Ġ= Ġ" 2 . 1 - M 2 - groovy - 3 . 0 ") ĊĊ ĉ // ĠRe actor ĠTest Ġsupport . Ċ ĉ test Implementation ( group Ġ= Ġ" io . project reactor ", Ġname Ġ= Ġ" reactor - test ", Ġversion Ġ= Ġ" 3 . 4 . 1 4 ") Ċ } Ċ Ċ /** Ċ Ġ* ĠMake Ġthe Ġit est Ġsource Ġset Ġcontain Ġthe Ġmain Ġand Ġtest Ġclasspath , Ġso Ġwe Ġcan Ġuse Ġtest Ġ( helper ) Ġcode Ġin Ġit est Ġas Ġwell . Ċ Ġ*/ Ċ it est Source Set Ġ{ Ċ ĉ compile Classpath Ġ= Ġsource Sets [" main "]. compile Classpath Ġ+ Ċĉĉ ĉ source Sets [" main "]. output Ġ+ Ċĉĉ ĉ source Sets [" test "]. compile Classpath Ġ+ Ċĉĉ ĉ source Sets [" test "]. output Ċ ĉ runtime Classpath Ġ= Ġsource Sets [" main "]. runtime Classpath Ġ+ Ċĉĉ ĉ source Sets [" main "]. output Ġ+ Ċĉĉ ĉ source Sets [" test "]. runtime Classpath Ġ+ Ċĉĉ ĉ source Sets [" test "]. output Ċ } Ċ Ċ /** Ċ Ġ* ĠS po ck Ġ 2 Ġuses Ġthe Ġnew ĠJ unit Ġplatform Ġto Ġexecute Ġthe Ġtests . Ċ Ġ* Ġ@ see Ġ" https :// dis cuss . gradle . org / t / sp ock - tests - dont - run - with - gradle - 7 - groovy - 3 / 4 0 1 3 9 " Ċ Ġ*/ Ċ tasks . with Type < Test > Ġ{ Ċ ĉ use JUnit Platform () Ċ } Ċ Ċ /** Ċ Ġ* ĠOverride Ġdefault Ġjava Ġcompiler Ġsettings Ċ Ġ*/ Ċ tasks . with Type < Java Compile > Ġ{ Ċ ĉ // Ġoverride Ġdefault Ġfalse Ċ ĉ options . is De precation Ġ= Ġtrue Ċ ĉ // Ġdefaults Ġto Ġuse Ġthe Ġplatform Ġencoding Ċ ĉ options . encoding Ġ= ĠUTF _ 8 . name () Ċ ĉ // Ġadd ĠX lint Ġto Ġour Ġcompiler Ġoptions Ġ( but Ġdisable Ġprocessing Ġbecause Ġof ĠSpring Ġwarnings Ġin Ġcode ) Ċ ĉ // Ġand Ġmake Ġwarnings Ġbe Ġtreated Ġlike Ġerrors Ċ ĉ options . compiler Args . addAll ( array Of ("- X lint : all ", Ġ"- X lint :- processing ", Ġ"- W error ")) Ċ } Ċ Ċ /** Ċ Ġ* ĠCreate Ġmanifest Ġsettings . Ċ Ġ*/ Ċ tasks . get ByName < org . springframework . boot . gradle . tasks . bund ling . Boot Jar >(" boot Jar ") Ġ{ Ċ ĉ manifest Ġ{ Ċĉ ĉ attributes (" Specification - Title " Ġto Ġartifact Description ) Ċĉ ĉ attributes (" Specification - Vendor " Ġto Ġvendor ) ĊĊĉ ĉ attributes (" Name " Ġto Ġartifact Description ) Ċĉ ĉ attributes (" Implementation - Title " Ġto Ġartifact Description ) Ċĉ ĉ attributes (" Implementation - Version " Ġto Ġproject . version . toString ()) Ċĉ ĉ attributes (" Implementation - Vendor " Ġto Ġvendor ) ĊĊ ĉ } Ċ } Ċ Ċ /** Ċ Ġ* ĠConfiguration Ġof Ġcheck style . Ċ Ġ*/ Ċ check style Ġ{ Ċ ĉ configFile Ġ= Ġfile ("/ config / check style / check style . xml ") Ċ } Ċ Ċ /** Ċ Ġ* ĠConfiguration Ġof ĠP MD . Ċ Ġ*/ Ċ pmd Ġ{ Ċ ĉ // Ġas Ġa Ġdevelopment Ġteam Ġwe Ġwant Ġp md Ġfailures Ġto Ġbreak Ġthe Ġbuild Ġand Ġkeep Ġthe Ġcode Ġclean . Ċ ĉ is Ignore Failures Ġ= Ġfalse Ċ ĉ // Ġdirectly Ġshow Ġthe Ġfailures Ġin Ġthe Ġoutput Ċ ĉ is Console Output Ġ= Ġtrue Ċ ĉ // Ġthe Ġconfiguration Ġof Ġthe Ġcustom Ġrules Ċ ĉ rule Set Config Ġ= Ġresources . text . from File ( project Dir . path Ġ+ Ġ"/ config / pmd / pmd . xml ") Ċ ĉ // Ġclear Ġthe Ġdefault Ġlist Ġof Ġrules , Ġotherwise Ġthis Ġwill Ġoverride Ġour Ġcustom Ġconfiguration . Ċ ĉ rule Sets Ġ= ĠlistOf < String >() Ċ ĉ tool Version Ġ= Ġ" 6 . 3 1 . 0 " Ċ } Ċ Ċ /** Ċ Ġ* ĠConfiguration Ġof Ġspot bugs Ġwith Ġour Ġex clusion Ġconfiguration Ġto Ġenable Ġthe Ġreport Ġformat Ġon ĠCI Ġin ĠXML Ġand Ġlocal Ġin ĠHTML . Ċ Ġ*/ Ċ spot bugs Ġ{ Ċ ĉ val Ġformat Ġ= Ġfind Property (" spot bugs Report Format ") Ċ ĉ val Ġxml Format Ġ= Ġ( format Ġ== Ġ" xml ") Ċ ĉ show Progress . set ( true ) Ċ ĉ exclude Filter . set ( project . file ("/ config / spot bugs / exclude . xml ")) ĊĊ ĉ tasks . spot bugs Main Ġ{ Ċĉ ĉ reports . create (" html ") Ġ{ Ċĉĉ ĉ isEnabled Ġ= Ġ! xml Format Ċĉ ĉ } Ċĉ ĉ reports . create (" xml ") Ġ{ Ċĉĉ ĉ isEnabled Ġ= Ġxml Format Ċĉ ĉ } Ċ ĉ } Ċ ĉ tasks . spot bugs Test Ġ{ Ċĉ ĉ reports . create (" html ") Ġ{ Ċĉĉ ĉ isEnabled Ġ= Ġ! xml Format Ċĉ ĉ } Ċĉ ĉ reports . create (" xml ") Ġ{ Ċĉĉ ĉ isEnabled Ġ= Ġxml Format Ċĉ ĉ } ĊĊ ĉ } Ċ } Ċ Ċ /** Ċ Ġ* ĠGenerates Ġtest Ġreport Ġafter Ġtest Ġtask . Ċ Ġ* ĠPro duces Ġ' jac oco Test Report . xml ' Ġin Ġ` build / reports / jac oco / test / `. Ċ Ġ*/ Ċ tasks . test Ġ{ Ċ ĉ final ized By ( tasks . jac oco Test Report ) Ġ// Ġreport Ġis Ġalways Ġgenerated Ġafter Ġtests Ġrun Ċ } Ċ Ċ /** Ċ Ġ* ĠMake Ġsure Ġthe Ġreport Ġis Ġin ĠXML Ġformat , Ġinstead Ġof Ġbinary . Ċ Ġ*/ Ċ tasks . jac oco Test Report Ġ{ Ċ ĉ reports Ġ{ Ċĉ ĉ xml . required . set ( true ) Ċ ĉ } Ċ } Ċ