рдЧреНрд░реЗрдбрд▓ рдЯрд╛рд╕реНрдХ рдХрд╛ рд╡рд┐рд╡рд░рдг



рдирд┐: рд╢реБрд▓реНрдХ рдкреБрд╕реНрддрдХ рднрд╡рди рдФрд░ рдЧреНрд░реИрдбрд▓ рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдХреЗ рджреВрд╕рд░реЗ рдЕрдзреНрдпрд╛рдп рдХрд╛ рдЕрдиреБрд╡рд╛рдж

рдХрд╛рд░реНрдп рдЧреНрд░реЗрдб рдмрд┐рд▓реНрдб рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рд░реНрдорд╛рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдореБрдЦреНрдп рдШрдЯрдХ рд╣реИред рдЯрд╛рд╕реНрдХ рдХреЛ рдмрд┐рд▓реНрдб рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдмрд┐рд▓реНрдб рд╕реЗрдЯреНрд╕ рдХрд╛ рдирд╛рдо рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЧреНрд░реИрдбрд▓ рдПрдкреНрд▓реАрдХреЗрд╢рди рдХреЗ рдирд┐рд░реНрдорд╛рдг рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рдЬрдм рдЕрдиреНрдп рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯрдо рдХреА рддреБрд▓рдирд╛ рдореЗрдВ, рдХрд╛рд░реНрдп рдПрдХ рдкрд░рд┐рдЪрд┐рдд рдЕрдореВрд░реНрдд рдХреА рддрд░рд╣ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЧреНрд░реИрдбрд▓ рдПрдХ рдЕрдзрд┐рдХ рдЙрдиреНрдирдд рдореЙрдбрд▓ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд░рд┐рдЪрд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдирд┐рд░реНрднрд░рддрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд┐рд░реНрдорд╛рдг рдХрд╛рд░реНрдпреЛрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХреА рдкрд╛рд░рдВрдкрд░рд┐рдХ рдХреНрд╖рдорддрд╛рдУрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ, рдЧреНрд░реИрдбрд▓ рдХрд╛рд░реНрдп рдкреВрд░реНрдг рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рд╡рд╛рд▓реА рд╡рд╕реНрддреБрдПрдВ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЖрдЗрдП рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдХрд┐ рдЖрдк рдХрд┐рди рддрд░реАрдХреЛрдВ рд╕реЗ рдХрд┐рд╕реА рдХрд╛рд░реНрдп рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рджреЛ рдкреНрд░рдореБрдЦ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдФрд░ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЬрд┐рд╕реЗ рд╣рдо рд▓рдЪреАрд▓реА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдХрд╛рд░реНрдп рдХреА рдШреЛрд╖рдгрд╛


рдХрд╛рд░реНрдп рдмрдирд╛рдиреЗ рдХрд╛ рдПрдХ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИред рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдХрд╛рд░реНрдп рдХрд╛ рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реИ:

рдЙрджрд╛рд╣рд░рдг 1. рдЕрдХреЗрд▓реЗ рдирд╛рдо рд╕реЗ рдХрд┐рд╕реА рдХрд╛рд░реНрдп рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рдирд╛

task hello 

gradle hello рдХрдорд╛рдВрдб gradle hello рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рддрд╛ рд╣реИ:

рдЙрджрд╛рд╣рд░рдг 2. рдХрд┐рд╕реА рдирдП рдХрд╛рд░реНрдп рдкрд░ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд░рд┐рдкреЛрд░реНрдЯ

 ------------------------------------------------------------ All tasks runnable from root project ------------------------------------------------------------ Build Setup tasks ----------------- init - Initializes a new Gradle build. [incubating] wrapper - Generates Gradle wrapper files. [incubating] Help tasks ---------- dependencies - Displays all dependencies declared in root project '__project'. dependencyInsight - Displays the insight into a specific dependency in root project '__project'. help - Displays a help message projects - Displays the sub-projects of root project '__project'. properties - Displays the properties of root project '__project'. tasks - Displays the tasks runnable from root project '__project'. Other tasks ----------- hello 


рдХрд╛рд░реНрдп рдХреНрд░рд┐рдпрд╛


gradle hello рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдЕрдкрдирд╛ рдХрд╛рд░реНрдп рдХрд░рдирд╛ рдЕрднреА рднреА рдХреЛрдИ рдкрд░рд┐рдгрд╛рдо рдирд╣реАрдВ gradle hello , рдХреНрдпреЛрдВрдХрд┐ рд╣рдордиреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рднреА рдПрдХреНрд╢рди рдирд╣реАрдВ рджрд┐рдпрд╛ рд╣реИ ред рдмрд╛рдПрдВ рд╢рд┐рдлреНрдЯ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдСрдкрд░реЗрд╢рди рд╕реМрдВрдкрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

рдЙрджрд╛рд╣рд░рдг 3. рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдСрдкрд░реЗрд╢рди рдЬреЛрдбрд╝рдирд╛

 task hello << { println 'hello, world' } 

рдСрдкрд░реЗрдЯрд░реНрд╕ рдЬреИрд╕реЗ рдХрд┐ << (рдЬрд╛рд╡рд╛ рд╕реЗ "рд▓реЗрдлреНрдЯ рд╢рд┐рдлреНрдЯ") рдХреЛ рдЧреНрд░реЛрд╡реА рдореЗрдВ рдУрд╡рд░рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╡реЗ рдЙрди рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓ рд╕рдХреЗрдВ рдЬрд┐рдирдХреЗ рд╕рд╛рде рд╡реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, << рдЧреНрд░реИрдб рдореЗрдВ рдУрд╡рд░рд▓реЛрдбреЗрдб рд╣реИ рдЬреЛ рдХрд┐ рдХрд╛рд░реНрдп рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рдХреЛрдб рдХреЗ рдПрдХ рдмреНрд▓реЙрдХ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред рдПрдХ рдмрд╛рдИрдВ рдкрд╛рд░реА doLast() рд╡рд┐рдзрд┐ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдо рдиреАрдЪреЗ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВрдЧреЗред

рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рддрд░реАрдХреЗ рд╕реЗ рдСрдкрд░реЗрд╢рди рдХреЛрдб рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рд▓рдЪреАрд▓реА рдХреНрд╖рдорддрд╛ рд╣реИ, рдЬреЛ рд╣рдордиреЗ рдмрдирд╛рдИ рдЧрдИ рдХрд╛рд░реНрдп рд╡рд╕реНрддреБ рдХрд╛ рдЬрд┐рдХреНрд░ рдХрд░рддреЗ рд╣реБрдП рдХрд┐рдпрд╛ рд╣реИ:

рдЙрджрд╛рд╣рд░рдг 4. рдХрд╛рд░реНрдп рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдПрдХ рдмрд╛рд░ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛

 task hello hello << { print 'hello, ' } hello << { println 'world' } 

рдЕрдм рд╣рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдмрдирд╛рдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рд╛ рд╣реИ:

рдЙрджрд╛рд╣рд░рдг 5. рдСрдкрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдПрдХ рд╕рдордп рдореЗрдВ рдПрдХ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛

 d:\project>gradle hello :hello hello, world BUILD SUCCESSFUL Total time: 1.916 secs 

рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рддреБрдЪреНрдЫ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛ рдкреНрд░рдХрдЯ рдХрд░рддрд╛ рд╣реИ: рдХрд╛рд░реНрдп рдирд┐рд░реНрдорд╛рдг рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕реНрдерд┐рд░ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдШреЛрд╖рдгрд╛ рдирд╣реАрдВ рд╣реИрдВ; рдХрд╛рд░реНрдп рдЧреНрд░реЗрдб рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╡рд╛рддрд╛рд╡рд░рдг рдХреА рдкреВрд░реНрдг рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рд╡рд╛рд▓реА рд╡рд╕реНрддреБрдПрдВ рд╣реИрдВред рдмрд┐рд▓реНрдб рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдордирдорд╛рдирд╛ рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рдПрдХ additive рддрд░реАрдХреЗ рд╕реЗ рдЙрдирдореЗрдВ рд╕рдВрдЪрд╛рд▓рди рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрдиреНрдп рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ рднреА рд╣реИрдВред рдЖрдЗрдП рджреЗрдЦрддреЗ рд╣реИрдВ рдХреМрди рд╕реЗ рд╣реИрдВред

рдХрд╛рд░реНрдп рд╡рд┐рдиреНрдпрд╛рд╕


рдирдП рдЧреНрд░реИрдбрд▓ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрдорддреМрд░ рдкрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреНрд░рдорд┐рдд рд╣реЛрддреЗ рд╣реИрдВ рдЬрдм рд╡реЗ рдХрд╛рд░реНрдп рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реБрдП, рд╣рдо рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмреНрд▓реЙрдХ рдЬреЛрдбрд╝рдХрд░ рдЗрд╕рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

рдЙрджрд╛рд╣рд░рдг 6. рд╡рд┐рдиреНрдпрд╛рд╕ рдФрд░ рдХрд╛рд░реНрдп рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдорд┐рд▓рд╛рдирд╛

 task initializeDatabase initializeDatabase << { println 'connect to database' } initializeDatabase << { println 'update database schema' } initializeDatabase { println 'configuring database connection' } 

рдРрд╕реА рдмрд┐рд▓реНрдб рдлрд╝рд╛рдЗрд▓ рдЪрд▓рд╛рдиреЗ рд╕реЗ, рд╣рдореЗрдВ рдПрдХ рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рддрд╛ рд╣реИ рдЬреЛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЕрддрд╛рд░реНрдХрд┐рдХ рд▓рдЧрддрд╛ рд╣реИ:

рдЙрджрд╛рд╣рд░рдг 7. рдКрдкрд░ рдмрдирд╛рдИ рдЧрдИ рдмрд┐рд▓реНрдб рдлрд╝рд╛рдЗрд▓ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо

 d:\project>gradle initializeDatabase configuring database connection :initializeDatabase connect to database update database schema BUILD SUCCESSFUL Total time: 3.088 secs 

рдШреБрдВрдШрд░рд╛рд▓реЗ рдмреНрд░реЗрд╕рд┐рдЬрд╝ рдХреА рдПрдХ рдЬреЛрдбрд╝реА рдХреЗ рдмреАрдЪ рдХреЛрдб рдХреЗ рдПрдХ рдЦрдВрдб рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЧреНрд░реВрд╡реА "рдмрдВрдж рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐" рдпрд╛ "рдмрдВрдж" рд╢рдмреНрдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рд╕рдорд╛рдкрди рдХрд╛рд░реНрдп рдЙрди рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рдорд╛рди рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдмрд╛рдж рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрди рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд╕рд╛рде рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдПрдХ рдЪрд░ рдХреЛ рд╕реМрдВрдкрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЖрдк рдЙрдиреНрд╣реЗрдВ рдЧреНрд░реИрдбрд▓ рдореЗрдВ рд╣рд░ рдЬрдЧрд╣ рджреЗрдЦреЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдмреНрд▓реЙрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдмреЗрд╣рдж рдЙрдкрдпреБрдХреНрдд рд╣реИрдВ рдЬрд╣рд╛рдВ рдЖрдк рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛрдб рдФрд░ рдмрд┐рд▓реНрдб рдСрдкрд░реЗрд╢рди рдХреЗ рдХреЛрдб рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЕрдВрддрд┐рдо рдмрдВрдж рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдмрд┐рд▓реНрдб рдСрдкрд░реЗрд╢рди рдХреЗ рдЕрдЧрд▓реЗ рдмреНрд▓реЙрдХ рдХреА рддрд░рд╣ рд▓рдЧрддреА рд╣реИ, рдФрд░ рд╣рдо рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЙрд╕рдХреЗ рд╕рдВрджреЗрд╢ рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рдЕрдВрддрд┐рдо рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рдирд╣реАрдВред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдмрд╛рдПрдВ рд╢рд┐рдлреНрдЯ рдСрдкрд░реЗрдЯрд░ рдХреЗ рдмрд┐рдирд╛ рдХрд╛рд░реНрдп рдХреЗ рдирд╛рдо рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдПрдХ рдХреНрд▓реЛрдЬрд░ рдПрдХ рдирдпрд╛ рдСрдкрд░реЗрд╢рди рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмреНрд▓реЙрдХ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ред рдХрд╛рд░реНрдп рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмреНрд▓реЙрдХ рдХреЛ рдЧреНрд░реЗрдбрд▓ рдЬреАрд╡рди рдЪрдХреНрд░ рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЪрд░рдг рдХреЗ рджреМрд░рд╛рди рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдирд┐рд╖реНрдкрд╛рджрди рдЪрд░рдг рд╕реЗ рдкрд╣рд▓реЗ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рджреМрд░рд╛рди рдХрд╛рд░реНрдп рд╕рдВрдЪрд╛рд▓рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╣рд░ рдмрд╛рд░ рдЧреНрд░реИрдбрд▓ рдПрдХ рдмрд┐рд▓реНрдб рд▓реЙрдиреНрдЪ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЬреАрд╡рди рдЪрдХреНрд░ рдХреЗ рддреАрди рдЪрд░рдгреЛрдВ рд╕реЗ рдЧреБрдЬрд░рддреА рд╣реИ: рдЖрд░рдВрднреАрдХрд░рдг, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдФрд░ рдирд┐рд╖реНрдкрд╛рджрдиред рдирд┐рд╖реНрдкрд╛рджрди - рдПрдХ рдЪрд░рдг рдЬрд┐рд╕рдХреЗ рджреМрд░рд╛рди рдирд┐рд░реНрдорд╛рдг рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЙрдирдХреА рдирд┐рд░реНрднрд░рддрд╛ рдХреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреНрд░рдо рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╡рд╣ рдЪрд░рдг рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХрд┐рд╕реА рдХрд╛рд░реНрдп рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЖрдВрддрд░рд┐рдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЙрдбрд▓ рдореЗрдВ рдЗрдХрдЯреНрдард╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЖрдорддреМрд░ рдкрд░ рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдЪрдХреНрд░реАрдп рдЧреНрд░рд╛рдл рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЪрд░рдг рд╡рд╣ рдЪрд░рдг рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЧреНрд░реЗрдбрд▓ рдпрд╣ рддрдп рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕реА рд╡рд╕реНрддреБрдПрдВ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рднрд╛рдЧ рд▓реЗрдВрдЧреАред рдорд▓реНрдЯреА-рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрд┐рд▓реНрдб рдореЗрдВ рдЕрдВрддрд┐рдо рдЪрд░рдг рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред

рд▓рдЧрднрдЧред рдкреНрд░рддрд┐ред
рд╢рдмреНрджрд╛рд╡рд▓реА рд╕реЗ: рдЧреНрд░реЗрдб рдбреАрдПрдЬреА - рдбрд╛рдпрд░реЗрдХреНрдЯреЗрдб рдПрд╕рд╛рдЗрдХреНрд▓рд┐рдХ рдЧреНрд░рд╛рдл ( рдирд┐рд░реНрджреЗрд╢рд┐рдд рдПрд╕рд╛рдЗрдХреНрд▓рд┐рдХ рдЧреНрд░рд╛рдл ) - рдирд┐рд░реНрджреЗрд╢рд┐рдд, рдЪрдХреНрд░ рдпреБрдХреНрдд рдирд╣реАрдВ, рдЧреНрд░рд╛рдлред рдЧреНрд░рд╛рдл рдХреЗ рдХреЛрдиреЗ рдЧреНрд░реИрдбрд▓ рдХрд╛рд░реНрдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред dependsOn рд╡рд┐рдзрд┐, рдЬреЛ рджреВрд╕рд░реЗ рдкрд░ рдЗрд╕ рдХрд╛рд░реНрдп рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреА рд╣реИ, рдПрдХ рдФрд░ рдХрд╛рд░реНрдп рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдПрдХ рдирдпрд╛ рд╢реАрд░реНрд╖ (рдпрджрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЧреНрд░рд╛рдл рдореЗрдВ рдирд╣реАрдВ рд╣реИ) рдФрд░ рджреЛ рдХреЛрдиреЗ рдХреЗ рдмреАрдЪ рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдмрдврд╝рдд рдмрдирд╛рддрд╛ рд╣реИред dependsOn рдХреЗ рд╕рд╛рде рдмрдирд╛рдП рдЧрдП рдХрд┐рд╕реА рднреА рдХрдиреЗрдХреНрд╢рди рдХреЛ рдЫреЛрд░реЛрдВ рдХреЗ рд▓рд┐рдП dependsOn рдЬрд╛рддрд╛ рд╣реИред рдРрд╕рд╛ рдХреЛрдИ рд░рд╛рд╕реНрддрд╛ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╢реАрд░реНрд╖ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ, рдЧреНрд░рд╛рдл рдХреЗ рдХрд┐рдирд╛рд░реЛрдВ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдореВрд▓ рд╢реАрд░реНрд╖ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИред

рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреНрд▓реЛрдЬрд░ рдЙрд╕реА рддрд░рд╣ additive рд╣реИрдВ рдЬреИрд╕реЗ рдСрдкрд░реЗрд╢рди рдХреНрд▓реЛрдЬрд░ред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдб рдлрд╝рд╛рдЗрд▓ рдХреЗ рдХреЛрдб рдХреЛ рдиреАрдЪреЗ рд╡рд░реНрдгрд┐рдд рддрд░реАрдХреЗ рд╕реЗ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдкрд╣рд▓реЗ рдЬреИрд╕рд╛ рд╣реЛрдЧрд╛:

рдЙрджрд╛рд╣рд░рдг 8. рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмреНрд▓реЙрдХ рдЬреЛрдбрд╝рдирд╛

 task initializeDatabase initializeDatabase << { println 'connect to database' } initializeDatabase << { println 'update database schema' } initializeDatabase { print 'configuring ' } initializeDatabase { println 'database connection' } 


рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмреНрд▓реЙрдХ рд╡реИрд░рд┐рдПрдмрд▓ рдФрд░ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдпреБрдХреНрдд рд╕реНрдерд╛рди рд╣реИ рдЬреЛ рдХрд┐ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рд╢реБрд░реВ рд╣реЛрдиреЗ рдкрд░ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдХрд╛рд░реНрдп рд╕рдВрдЪрд╛рд▓рди рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдпрджрд┐ рдХреЗрд╡рд▓ рдпрд╣ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ)ред рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕рдВрд░рдЪрдирд╛ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдПрдХ рд╡рд┐рдХрд╕рд┐рдд рд╡рд╕реНрддреБ рдореЙрдбрд▓ рдХреЗ рд╕рд╛рд░ рдореЗрдВ рдмрджрд▓рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рджреЗрддреА рд╣реИ, рдЬреЛ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╕реЗ рднрд░рд╛ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдЧреНрд░реЗрдбрд▓ рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рдирд┐рд░реНрдорд╛рдг рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдПрдХ рд╕рд░рд▓ рд╕реЗрдЯ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рд╣реИ рдЬреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЕрдиреБрдХреНрд░рдо рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдФрд░ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдмреАрдЪ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрдВрддрд░ рдХреЗ рдмрд┐рдирд╛, рдирд┐рд░реНрднрд░рддрд╛ рдХреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдЬрдЯрд┐рд▓ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧрд╛, рдЬрд┐рд╕рд╕реЗ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рдХрд╛ рдиреБрдХрд╕рд╛рди рд╣реЛрдЧрд╛ рдФрд░ рдирд┐рд░реНрдорд╛рдг рдХреА рдореБрдЦреНрдп рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рдзрдиреЛрдВ рдХреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ рдХрдореА рд╣реЛрдЧреАред

рдЬрдм рдЧреНрд░реЗрдб рдлрд╝рд╛рдЗрд▓ рд▓реЙрдиреНрдЪ рдХреА рдЬрд╛рддреА рд╣реИ, рддреЛ рдмрд┐рд▓реНрдб рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛрдб рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рдирд┐рд╖реНрдкрд╛рджрди рдЪрд░рдг рдореЗрдВ рдХреЛрдИ рднреА рдХрд╛рд░реНрдп рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдХрд╛рд░реНрдп рд╡рд╕реНрддреБрдПрдВ рд╣реИрдВ


рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░, рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдХреВрдмрдбрд╝ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдмрд┐рд▓реНрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЧреНрд░реИрдбрд▓, рдЕрдкрдиреЗ рдЖрдВрддрд░рд┐рдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЙрдбрд▓ рдХреЛ рдмрдирд╛рддрд╛ рд╣реИред рдареАрдХ рдРрд╕рд╛ рд╣реА рд╣реЛрддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рд░реНрдп рдЬрд┐рд╕реЗ рдЖрдк рдШреЛрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдкреВрд░реЗ рдмрд┐рд▓реНрдб рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рднреАрддрд░ рдПрдХ рдХрд╛рд░реНрдп рдСрдмреНрдЬреЗрдХреНрдЯ рдмрди рдЬрд╛рддрд╛ рд╣реИред рдХрд┐рд╕реА рдЕрдиреНрдп рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рддрд░рд╣ рдХрд╛рд░реНрдп рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдЧреБрдг рдФрд░ рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реЛрддреА рд╣реИрдВред рдФрд░ рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рд░реНрдп рд╡рд╕реНрддреБ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рднреА рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╣реИред рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рд╣рдореЗрдВ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВрдЧреЗред

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдкреНрд░рддреНрдпреЗрдХ рдирдП рдХрд╛рд░реНрдп рдХреЛ DefaultTask рдЯрд╛рдЗрдк рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдЬрд╛рд╡рд╛ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЧ java.lang.Object рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рддрд╛ рд╣реИ, рдЙрд╕реА рдкреНрд░рдХрд╛рд░ рдЧреНрд░реЗрдбреЗрдб рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рд░реНрдп рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рдкреНрд░рдХрд╛рд░ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рддрд╛ рд╣реИ - рдпрд╣рд╛рдБ рддрдХ рдХрд┐ рд╡реЗ рдХрд╛рд░реНрдп рдЬреЛ рдПрдХ рдирдП рдкреНрд░рдХрд╛рд░ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдХреЗ DefaultTask рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, DefaultTask рдХрд╛рд░реНрдп рдХреБрдЫ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХреЛрдб рд╕рдВрдХрд▓рд┐рдд рдХрд░рдирд╛ рдпрд╛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдирд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЙрдирдХреЗ рдкрд╛рд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╣реИ рдЬреЛ рдЧреНрд░реЗрдбрд▓ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЧреНрд░реИрдбрд▓ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рд░реНрдп рдХреЗ рддрд░реАрдХреЛрдВ рдФрд░ рдЧреБрдгреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

DefaultTask рддрд░реАрдХреЗ


рдирд┐рд░реНрднрд░рддрд╛ (рдХрд╛рд░реНрдп)

рдХреЙрд▓рд┐рдВрдЧ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП, рдПрдХ рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛рд░реНрдп рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдПрдХ рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛рд░реНрдп рд╣рдореЗрд╢рд╛ рдЙрд╕ рдХрд╛рд░реНрдп рд╕реЗ рдкрд╣рд▓реЗ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдЙрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рд╡рд┐рдзрд┐ рдХреЛ рдХрдИ рддрд░реАрдХреЛрдВ рд╕реЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рд╣рдо loadTestData рдкрд░ createSchema рдХрд╛рд░реНрдп рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдХреИрд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

рдЙрджрд╛рд╣рд░рдг 9. dependsOn рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЗ

 task createSchema //   'loadTestData'  'createSchema' //  ,  ,   task loadTestData { dependsOn createSchema } //       task loadTestData { dependsOn << createSchema } //    ,    (   ) task loadTestData { dependsOn 'createSchema' } //    - task loadTestData loadTestData.dependsOn createSchema //      task loadTestData(dependsOn: createSchema) 

рдПрдХ рдХрд╛рд░реНрдп рдХрдИ рдХрд╛рд░реНрдпреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЕрдЧрд░ loadTestData рдХрд╛рд░реНрдп createSchema рдФрд░ compileTestClasses рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ compileTestClasses , рддреЛ рд╣рдо рдХреЛрдб рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:

рдЙрджрд╛рд╣рд░рдг 10. рдХрдИ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрднрд░рддрд╛ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЗ

 task compileTestClasses task createSchema //     task loadTestData { dependsOn << compileTestClasses dependsOn << createSchema } //  ,     task loadTestData { dependsOn compileTestClasses, createSchema } //    - task loadTestData loadTestData.dependsOn compileTestClasses, createSchema //      //      Groovy task loadTestData(dependsOn: [ compileTestClasses, createSchema ]) 

doFirst (рдмрдВрдж)

рдХрд╛рд░реНрдп рд╕рдВрдЪрд╛рд▓рди рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХреЛрдб рдХрд╛ рдПрдХ рдмреНрд▓реЙрдХ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдирд┐рд╖реНрдкрд╛рджрди рдЪрд░рдг рдХреЗ рджреМрд░рд╛рди, рдмрд┐рд▓реНрдб рдореЗрдВ рднрд╛рдЧ рд▓реЗрдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рд░реНрдп рдХреЗ рдСрдкрд░реЗрд╢рди рдмреНрд▓реЙрдХ рдХреЛ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред doFirst рд╡рд┐рдзрд┐ рдЖрдкрдХреЛ рдореМрдЬреВрджрд╛ рдСрдкрд░реЗрд╢рди рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рддрд░реНрдХ рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ, рднрд▓реЗ рд╣реА рдпрд╣ рдСрдкрд░реЗрд╢рди рдПрдХ рдмрд┐рд▓реНрдб рдлрд╝рд╛рдЗрд▓ рдпрд╛ рдкреНрд▓рдЧ-рдЗрди рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ рдЬрд┐рд╕рдореЗрдВ рдЖрдкрдХреА рдкрд╣реБрдВрдЪ рдирд╣реАрдВ рд╣реИред рдПрдХрд╛рдзрд┐рдХ doFirst рдХреЙрд▓ рдХрд╛рд░реНрдп рдЕрдиреБрдХреНрд░рдо рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдСрдкрд░реЗрд╢рди рдХреЛрдб рдХреЗ рд╕рд╛рде рдирдП рдмреНрд▓реЙрдХ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред

doFirst рд╡рд┐рдзрд┐ рдХреЛ рд╕реАрдзреЗ рдХрд╛рд░реНрдп рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕реЗ рдПрдХ рдХреНрд▓реЛрдЬрд░ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реБрдП рдЬрд┐рд╕рдореЗрдВ рдХреЛрдб рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдп рд╕рдВрдЪрд╛рд▓рди рд╕реЗ рдкрд╣рд▓реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рдХрд╣рд╛ рдерд╛, рдПрдХ рдХрд░реАрдмреА рдПрдХ рдХреЛрдбреА рдХрд╛ рдЧреНрд░реВрд╡реА рдмреНрд▓реЙрдХ рд╣реИ рдЬреЛ рдШреБрдВрдШрд░рд╛рд▓реЗ рдмреНрд░реЗрд╕рд┐рдЬрд╝ рдХреА рдПрдХ рдЬреЛрдбрд╝реА рдХреЗ рдмреАрдЪ рд╣реЛрддрд╛ рд╣реИред рдПрдХ рдмрдВрдж рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╡рд╕реНрддреБ рдХреА рддрд░рд╣ рдПрдХ рд╡рд┐рдзрд┐ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рдмрдВрдж рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдПрдХ рдЧреНрд░реВрд╡реА рд╢реИрд▓реА рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг 11. doFirst рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛

 task setupDatabaseTests << { //      println 'load test data' } setupDatabaseTests.doFirst { println 'create schema' } 

рдЙрджрд╛рд╣рд░рдг 12. рдЕрдВрддрд┐рдо рдмрд┐рд▓реНрдб рдлрд╝рд╛рдЗрд▓ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо

 d:\project>gradle setupDatabaseTests :setupDatabaseTests create schema load test data BUILD SUCCESSFUL Total time: 1.935 secs 

doFirst рдХреЛ рдЯрд╛рд╕реНрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмреНрд▓реЙрдХ рднреА рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рдХрд╣рд╛, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмреНрд▓реЙрдХ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХреЛрдб рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ рдЬреЛ рдХрд╛рд░реНрдп рд╕рдВрдЪрд╛рд▓рди рд╕реЗ рдкрд╣рд▓реЗ рдмрд┐рд▓реНрдб рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЪрд░рдг рдХреЗ рджреМрд░рд╛рди рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬрдм рд╣рдордиреЗ рдЙрдкрд░реЛрдХреНрдд рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛, рддреЛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдкреНрд░рд╢реНрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ: рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмреНрд▓реЙрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд╣рд╛рдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рдирд┐рдореНрди рдЙрджрд╛рд╣рд░рдг рдЖрдкрдХреЛ рджрд┐рдЦрд╛рдПрдЧрд╛ рдХрд┐ рдЖрдк рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмреНрд▓реЙрдХ рдХреЗ рдЕрдВрджрд░ рдХрд╛рд░реНрдп рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдХреИрд╕реЗ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдХрд╛рд░реНрдп рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрд╣реБрдд рдЕрднрд┐рд╡реНрдпрдВрдЬрдХ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд░реВрдк рдХрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдмрдирд╛рддрд╛ рд╣реИ:

рдЙрджрд╛рд╣рд░рдг 13. рдХрд╛рд░реНрдп рд╡рд┐рдиреНрдпрд╛рд╕ рдмреНрд▓реЙрдХ рдХреЗ рдЕрдВрджрд░ doFirst рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛

 task setupDatabaseTests << { println 'load test data' } setupDatabaseTests { doFirst { println 'create schema' } } 

doFirst рд▓рд┐рдП рджреЛрд╣рд░рд╛рдпрд╛ рдХреЙрд▓ additive рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдЫрд▓реА рдХреЙрд▓ рдХрд╛ рдСрдкрд░реЗрд╢рди рдХреЛрдб рд╕рд╣реЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╕реВрдЪреА рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдПрдХ рдирдпрд╛ рдХреНрд▓реЛрдЬрд░ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЙрдкрдпреБрдХреНрдд рдХреНрд░рдо рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдЧрд░ рд╣рдореЗрдВ рдПрдХреАрдХрд░рдг рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рднрд╛рдЧреЛрдВ рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЪрд░рдгреЛрдВ рдХреЛ рддреЛрдбрд╝рддреЗ рд╣реБрдП), рддреЛ рдЖрдк рдирд┐рдореНрди рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

рдЙрджрд╛рд╣рд░рдг 14. рдмрд╛рд░-рдмрд╛рд░ doFirst рдХреЙрд▓реНрд╕ рдореЗрдВ doFirst рдЧреБрдг рд╣реЛрддрд╛ рд╣реИ

 task setupDatabaseTests << { println 'load test data' } setupDatabaseTests.doFirst { println 'create database schema' } setupDatabaseTests.doFirst { println 'drop database schema' } 

рдЙрджрд╛рд╣рд░рдг 15. рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдкрд░рд┐рдгрд╛рдо

 d:\project>gradle setupDatabaseTests :setupDatabaseTests drop database schema create database schema load test data BUILD SUCCESSFUL Total time: 3.126 secs 

рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, doFirst() рд▓рд┐рдП рдПрдХ рдХреЙрд▓ рдХреЗ рд╕рд╛рде рддреАрди рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХреНрд▓реЛрдЬрд░ рдореЗрдВ рдЖрд░рдВрднреАрдХрд░рдг рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдХреБрдЫ рд╣рдж рддрдХ рдХреГрддреНрд░рд┐рдо рдХрджрдо рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдРрд╕реЗ рд╕рдордп рд╣реЛрддреЗ рд╣реИрдВ рдЬрдм рдХрд┐рд╕реА рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдХреЛрдб рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд╛рд░реНрдп рдПрдХ рдЕрдиреНрдп рдмрд┐рд▓реНрдб рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рдпрд╛ рдЕрд╡реНрдпрд╡рд╣рд╛рд░рд┐рдХ рд╣реИред рдЕрдкреНрд░рд╛рдкреНрдп рддрд░реНрдХ рдХреЗ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╕рдВрд╢реЛрдзрди рдХреА рд╡рд┐рдзрд┐ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╡реНрдпрд╛рдкрдХ рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ рдЦреЛрд▓рддреА рд╣реИред

рдЕрдм рддрдХ, рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдиреЗ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдЧреНрд░реИрдбрд▓ рдмрд╛рд░-рдмрд╛рд░ рдХреНрд▓реЛрдЬрд░ рдЬреЛрдбрд╝рдХрд░ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рд╣рдо рдХрд╛рд░реНрдп рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рддреЗ рд╣реИрдВ (рд╕рднреА рд╕рдорд╛рди, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░реАрдХреНрд╖рдг рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдмрдЬрд╛рдп рд╣рдо println рдСрдкрд░реЗрдЯрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ):

рдЙрджрд╛рд╣рд░рдг 16. рдирд┐рд░рд╕реНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдмрд╛рд░-рдмрд╛рд░ doFirst рдХреЙрд▓

 //    (    ) task setupDatabaseTests << { println 'load test data' } //    ( ,     ) setupDatabaseTests { doFirst { println 'create database schema' } doFirst { println 'drop database schema' } } 

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдордиреЗ рдПрдХ рд╣реА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмреНрд▓реЙрдХ рдХреЗ рдЕрдВрджрд░ рдХрдИ doFirst рдХреЙрд▓ рдПрдХ рд╕рд╛рде рд░рдЦреА рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдСрдкрд░реЗрд╢рди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА setupDatabaseTests рдХрд╛рд░реНрдп рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИред

doLast (рдмрдВрдж рдХрд░рдирд╛)

doLast рд╡рд┐рдзрд┐ doLast рд╡рд┐рдзрд┐ рдХреЗ рд╕рдорд╛рди рд╣реИ, рдХреЗрд╡рд▓ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдСрдкрд░реЗрд╢рди рдХреЗ рдЕрдВрдд рдореЗрдВ рд╡реНрдпрд╡рд╣рд╛рд░ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рди рдХрд┐ рд╢реБрд░реБрдЖрдд рдореЗрдВред рдпрджрд┐ рдЖрдкрдХреЛ рдХрд┐рд╕реА рдХрд╛рд░реНрдп рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдХреЛрдб рдХреЛ рдмреНрд▓реЙрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдк рдирд┐рдореНрди рдХрд╛рд░реНрдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

рдЙрджрд╛рд╣рд░рдг 17. DoLast рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

 task setupDatabaseTests << { println 'create database schema' } setupDatabaseTests.doLast { println 'load test data' } 

рдЙрджрд╛рд╣рд░рдг 18. DoLast рдХреЙрд▓рдмреИрдХ additive рд╣реИрдВ

 task setupDatabaseTests << { println 'create database schema' } setupDatabaseTests.doLast { println 'load test data' } setupDatabaseTests.doLast { println 'update version table' } 

рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХрд┐рд╕реА рдХрд╛рд░реНрдп рдХреЗ рдЕрдиреБрднрд╛рдЧ рдСрдкрд░реЗрд╢рди рдореЗрдВ , << рдСрдкрд░реЗрдЯрд░ doLast() рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рд╣реИред

рдХреЗрд╡рд▓ (рдмрдВрдж)

onlyIf рд╡рд┐рдзрд┐ рдПрдХ рд╡рд┐рдзреЗрдп рд╣реИ рдЬреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдп рдкреВрд░рд╛ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдпрд╛ рдирд╣реАрдВред рд╡рд┐рдзреЗрдп рдХрд╛ рдореВрд▓реНрдп рдХреНрд▓реЛрдЬрд░ рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдпрд╛ рдЧрдпрд╛ рдорд╛рди рд╣реИред рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдПрдХ рдХрд╛рд░реНрдп рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЕрдиреНрдпрдерд╛ рдмрд┐рд▓реНрдб рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдХреНрд░рдо рдореЗрдВ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред

рдЧреНрд░реВрд╡реА рдореЗрдВ, рдХреНрд▓реЛрдЬрд░ рдХреЗ рдЕрдВрджрд░ рдЕрдВрддрд┐рдо рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдЗрд╕рдХреЗ рд░рд┐рдЯрд░реНрди рдореВрд▓реНрдп рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреА рд╣реИ, рднрд▓реЗ рд╣реА рдХреЛрдИ return ред рдЧреНрд░реВрд╡реА рдкрджреНрдзрддрд┐, рдЬрд┐рд╕рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдЗрд╕ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдореВрд▓реНрдп рд▓реМрдЯрд╛рддрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг 19. рдХреЗрд╡рд▓ рдирд┐рд░реНрдорд╛рдг рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ

 task createSchema << { println 'create database schema' } task loadTestData(dependsOn: createSchema) << { println 'load test data' } loadTestData.onlyIf { System.properties['load.data'] == 'true' } 

рдЙрджрд╛рд╣рд░рдг 20. рдмрд┐рд▓реНрдб рдлрд╝рд╛рдЗрд▓ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рд╡рд┐рдХрд▓реНрдкред рдкрд░рд┐рдгрд╛рдореЛрдВ рдореЗрдВ рдЕрдВрддрд░ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред

 d:\project>gradle loadTestData :createSchema create database schema :loadTestData SKIPPED BUILD SUCCESSFUL Total time: 4.361 secs d:\project>gradle -Dload.data=true loadTestData :createSchema create database schema :loadTestData load test data BUILD SUCCESSFUL Total time: 2.005 secs 

onlyIf рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ onlyIf рдЖрдк рдЧреНрд░реВрд╡реА рдХреЛрдб рджреНрд╡рд╛рд░рд╛ рд╡реНрдпрдХреНрдд рдХрд┐рдП рдЧрдП рддрд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рдХреНрд╖рдо рдФрд░ рдЕрдХреНрд╖рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдХреЗрд╡рд▓ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рд╕рд░рд▓ System рд╕рдВрдкрддреНрддрд┐ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рддрдХ рд╕реАрдорд┐рдд рдирд╣реАрдВ рд╣реИред рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╛рдЗрд▓реЗрдВ рдЦреЛрд▓рдиреЗ, рд╡реЗрдм рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ, рд▓реЙрдЧрд┐рди рдкрд╛рд╕рд╡рд░реНрдбреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдФрд░ рдмрд╣реБрдд рдХреБрдЫ рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рд╣реИ рдЬреЛ рдХреЛрдб рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЧреБрдг


didWork

рдкреНрд░рдХрд╛рд░ boolean рдХреА рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдЬреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреА рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдХрд╛рд░реНрдп рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреВрд░рд╛ рд╣реБрдЖред рд╕рднреА рдХрд╛рд░реНрдп рдкреВрд░реНрдг рд╣реЛрдиреЗ рдХреЗ рд╕рдордп didWork рдкрд░ рд╕реЗрдЯ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдХреБрдЫ рдХрд╛рд░реНрдп, рдЬреИрд╕реЗ рдХрд┐ Compile , Copy рдФрд░ Delete , рдЗрд╕ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдореВрд▓реНрдп рдХреЛ рд╕реВрдЪрдирд╛ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЙрдирдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдпрд╛ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдкреВрд░рд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдПрдХ рдорд╛рди рдХреА рдЧрдгрдирд╛ рдЬреЛ рдпрд╣ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдп рдкрд╣рд▓реЗ рд╣реА рдкреВрд░рд╛ рд╣реЛ рдЪреБрдХрд╛ рд╣реИ, рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИред рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рдЕрд╕реЗрдВрдмрд▓реА рдХреЛрдб рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рджрд░реНрд╢рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рдЕрдкрдиреЗ рдХрд╛рд░реНрдп рдореЗрдВ didWork рдорд╛рди рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

рдЙрджрд╛рд╣рд░рдг 21. рд╕рдВрдХрд▓рди рд╕рдлрд▓ рд╣реЛрдиреЗ рдкрд░ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдИрдореЗрд▓ рднреЗрдЬрдирд╛

 apply plugin: 'java' task emailMe(dependsOn: compileJava) << { if (tasks.compileJava.didWork) { println 'SEND E-MAIL ANNOUNCING SUCCESS' } } 

рдЙрджрд╛рд╣рд░рдг 22. рдбреЙрдХрд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдкрд░рд┐рдгрд╛рдо

 d:\project>gradle emailMe :compileJava :emailMe SEND E-MAIL ANNOUNCING SUCCESS BUILD SUCCESSFUL Total time: 4.232 secs 

рд╕рдХреНрд╖рдо

рдПрдХ boolean рд╕рдВрдкрддреНрддрд┐ рдЬреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреА рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдХрд╛рд░реНрдп рдЪрд▓реЗрдЧрд╛ред рдЖрдк enabled рд╕рдВрдкрддреНрддрд┐ рдХреЛ false рд╕реЗрдЯ рдХрд░рдХреЗ рдХрд┐рд╕реА рдХрд╛рд░реНрдп рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдЕрдХреНрд╖рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХрд╛рд░реНрдп рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рдЙрд╕реА рдХреНрд░рдо рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдВрдЧреА рдЬреИрд╕реЗ рдХрд┐ рдХрд╛рд░реНрдп рдЕрдХреНрд╖рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдЙрджрд╛рд╣рд░рдг 23. рдХрд┐рд╕реА рдХрд╛рд░реНрдп рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдирд╛

 task templates << { println 'process email templates' } task sendEmails(dependsOn: templates) << { println 'send emails' } sendEmails.enabled = false 

рдЙрджрд╛рд╣рд░рдг 24. рдПрдХ рдЕрдХреНрд╖рдо рдХрд╛рд░реНрдп рдХреЗ рд╕рд╛рде рдмрдирд╛рдПрдБред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдирд┐рд░реНрднрд░рддрд╛ рдЕрднреА рднреА рд╢реБрд░реВ рд╣реЛрддреА рд╣реИред

 d:\project>gradle -b enabled.gradle sendEmails :templates process email templates :sendEmails SKIPPED BUILD SUCCESSFUL Total time: 3.271 secs 

-B рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкреИрд░рд╛рдореАрдЯрд░ рдЧреНрд░реИрдб рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдиреНрдп рдмрд┐рд▓реНрдб рдлрд╝рд╛рдЗрд▓ рдмрддрд╛рддрд╛ рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, build.gradle рдирд╛рдордХ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреА build.gradle , рд▓реЗрдХрд┐рди рдпрд╣ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╡рд┐рдХрд▓реНрдк рд╣рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдмрд┐рд▓реНрдб рдлрд╝рд╛рдЗрд▓ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдкрде

рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рдХрд╛рд░ рдХреА рд╕рдВрдкрддреНрддрд┐ рдЬрд┐рд╕рдореЗрдВ рдХрд╛рд░реНрдп рдХрд╛ рдкреВрд░реНрдг рдкрде рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдХрд╛рд░реНрдп рдкрде рдЙрд╕рдХреЗ рд╕рд╛рдордиреЗ рдПрдХ рдмреГрд╣рджрд╛рдиреНрддреНрд░ рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдп рдХрд╛ рдирд╛рдо рд╣реИред

рдЙрджрд╛рд╣рд░рдг 25. рдПрдХ рдПрдХрд▓-рд╕реНрддрд░реАрдп рдмрд┐рд▓реНрдб рдлрд╝рд╛рдЗрд▓ рдЬреЛ рдЗрд╕рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдПрдХрд▓ рдХрд╛рд░реНрдп рдХрд╛ рдкрде рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреА рд╣реИ

 task echoMyPath << { println "THIS TASK'S PATH IS ${path}" } 

рдЙрджрд╛рд╣рд░рдг 26. рдкрд┐рдЫрд▓реА рдмрд┐рд▓реНрдб рдлрд╝рд╛рдЗрд▓ рдХреЗ рдкрд░рд┐рдгрд╛рдо

 d:\project>gradle echoMyPath :echoMyPath THIS TASK'S PATH IS :echoMyPath BUILD SUCCESSFUL Total time: 3.135 secs 

рд╕рд╛рдордиреЗ рдПрдХ рдХреЛрд▓рди рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдп рдмрд┐рд▓реНрдб рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╢реАрд░реНрд╖ рд╕реНрддрд░ рдкрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╢реАрд░реНрд╖ рд╕реНрддрд░ рдкрд░ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИред рдЧреНрд░реИрдб рдЖрд╢реНрд░рд┐рдд рдЙрдкрдкреНрд░реЛрдЬреЗрдХреНрдЯ рдпрд╛ рдиреЗрд╕реНрдЯреЗрдб рдмрд┐рд▓реНрдб рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдХрд╛рд░реНрдп subProject рдирд╛рдордХ рдиреЗрд╕реНрдЯреЗрдб рдмрд┐рд▓реНрдб рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдкрде рд╣реЛрдЧрд╛ :subProject:echoMyPath ред

рд▓рдХрдбрд╝рд╣рд╛рд░рд╛

рдЖрдВрддрд░рд┐рдХ рдЧреНрд░реЗрдбрд▓ logger рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рд╕рдВрджрд░реНрднред org.slf4j.Logger , logger рдХрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реНрддрд░реЛрдВ рдХреЗ рд╕рд╛рде org.slf4j.Logger рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред logger рд╡рд╕реНрддреБ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд▓реЙрдЧрд┐рдВрдЧ рд╕реНрддрд░ рдиреАрдЪреЗ рд╡рд░реНрдгрд┐рдд рд╣реИрдВред рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдорд╛рдиреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд▓реЙрдЧрд┐рдВрдЧ рд╕реНрддрд░ рд╕реЗрдЯ рдХрд░рдирд╛, рдмрд╛рдж рдХреЗ рд╕рднреА рд╕реНрддрд░реЛрдВ рдкрд░ рд▓реЙрдЧрд┐рдВрдЧ рдФрд░ QUIET рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╕рдХреНрд╖рдо рдмрдирд╛рддрд╛ рд╣реИ:

рдЙрджрд╛рд╣рд░рдг 27. рдХрд╛рд░реНрдп рд▓реЙрдЧрд┐рдВрдЧ рдХреЗ рд╕рднреА рд╕реНрддрд░реЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдкреНрд░рднрд╛рд╡ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЧреНрд░реВрд╡реА рдХрд╛ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдХреЛрдб рд╕реВрдЪреА рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрднрд╛рд╡рд┐рдд рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд▓рд┐рдП рд▓реЙрдЧрд┐рдВрдЧ рд╕реНрддрд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рд░ рдмрд╛рд░ рд╕рдВрджреЗрд╢ рд▓реЙрдЧрд┐рдВрдЧ рд╕реНрддрд░реЛрдВ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдкрд░ рдЖрдЙрдЯрдкреБрдЯ рд╣реЛрддреЗ рд╣реИрдВ

 task logLevel << { def levels = ['DEBUG', 'INFO', 'LIFECYCLE', 'QUIET', 'WARN', 'ERROR'] levels.each { level -> logging.level = level def logMessage = "SETTING LogLevel=${level}" logger.error logMessage logger.error '-' * logMessage.size() logger.debug 'DEBUG ENABLED' logger.info 'INFO ENABLED' logger.lifecycle 'LIFECYCLE ENABLED' logger.warn 'WARN ENABLED' logger.quiet 'QUIET ENABLED' logger.error 'ERROR ENABLED' println 'THIS IS println OUTPUT' logger.error ' ' } } 

рдЙрджрд╛рд╣рд░рдг 28. рдкрд┐рдЫрд▓реА рдмрд┐рд▓реНрдб рдлрд╝рд╛рдЗрд▓ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо

 d:\project>gradle logLevel 19:35:44.677 [LIFECYCLE] [class org.gradle.TaskExecutionLogger] 19:35:44.699 [ERROR] [org.gradle.api.Task] SETTING LogLevel=DEBU 19:35:44.732 [ERROR] [org.gradle.api.Task] --------------------- 19:35:44.747 [DEBUG] [org.gradle.api.Task] DEBUG ENABLED 19:35:44.760 [INFO] [org.gradle.api.Task] INFO ENABLED 19:35:44.775 [LIFECYCLE] [org.gradle.api.Task] LIFECYCLE ENABLED 19:35:44.788 [WARN] [org.gradle.api.Task] WARN ENABLED 19:35:44.801 [QUIET] [org.gradle.api.Task] QUIET ENABLED 19:35:44.812 [ERROR] [org.gradle.api.Task] ERROR ENABLED 19:35:44.857 [QUIET] [system.out] THIS IS println OUTPUT 19:35:44.868 [ERROR] [org.gradle.api.Task] SETTING LogLevel=INFO --------------------- INFO ENABLED LIFECYCLE ENABLED WARN ENABLED QUIET ENABLED ERROR ENABLED THIS IS println OUTPUT SETTING LogLevel=LIFECYCLE -------------------------- LIFECYCLE ENABLED WARN ENABLED QUIET ENABLED ERROR ENABLED THIS IS println OUTPUT SETTING LogLevel=QUIET ---------------------- QUIET ENABLED ERROR ENABLED THIS IS println OUTPUT SETTING LogLevel=WARN --------------------- WARN ENABLED QUIET ENABLED ERROR ENABLED THIS IS println OUTPUT SETTING LogLevel=ERROR ---------------------- ERROR ENABLED BUILD SUCCESSFUL Total time: 2.184 secs 


рд▓реЙрдЧрд┐рдВрдЧ

рд╕рдВрдкрддреНрддрд┐ loggingрд╣рдореЗрдВ рд▓реЙрдЧрд┐рдВрдЧ рдХреЗ рд╕реНрддрд░ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдВрдкрддреНрддрд┐ рдХреЗlogger рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ , рдмрд┐рд▓реНрдб рдХрд╛ рд▓реЙрдЧрд┐рдВрдЧ рд╕реНрддрд░ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдФрд░ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ logging.levelред

рд╡рд┐рд╡рд░рдг

рд╕рдВрдкрддреНрддрд┐ description, рдЬреИрд╕рд╛ рдХрд┐ рдирд╛рдо рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ, рдорд╛рдирд╡ рд╕рдордЭ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХреА рдПрдХ рдЫреЛрдЯреА рд░рд╛рд╢рд┐ рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдп рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред рдореВрд▓реНрдп descriptionрдХрдИ рдорд╛рдпрдиреЛрдВ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

рдЙрджрд╛рд╣рд░рдг 29. рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, рд╣рдо рдХрд╛рд░реНрдп рд╡рд┐рд╡рд░рдг рдФрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ

 task helloWorld(description: 'Says hello to the world') << { println 'hello, world' } 

рдЙрджрд╛рд╣рд░рдг 30. рдХрд╛рд░реНрдп рд╡реНрдпрд╡рд╣рд╛рд░ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдФрд░ рд╡рд┐рд╡рд░рдг рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рджреЛ рддрд░реАрдХреЗ

 task helloWorld << { println 'hello, world' } helloWorld { description 'Says hello to the world' } //    helloWorld.description 'Says hello to the world' 


temporaryDir

рд╕рдВрдкрддреНрддрд┐ temporaryDirрдПрдХ рдРрд╕реА рд╡рд╕реНрддреБ рд▓реМрдЯрд╛рддреА рд╣реИ рдЬреЛ Fileрд╡рд░реНрддрдорд╛рди рдмрд┐рд▓реНрдб рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрд╕реНрдерд╛рдпреА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддреА рд╣реИред рдРрд╕реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХрд╛рд░реНрдп рдХреЗ рдордзреНрдпрд╡рд░реНрддреА рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдпрд╛ рдЙрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИ, рдЬреЛ рдХрд╛рд░реНрдп рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░реЗрдЧрд╛ред

рдЧрддрд┐рд╢реАрд▓ рдЧреБрдг


рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рджреЗрдЦрд╛ рд╣реИ, рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдЖрдВрддрд░рд┐рдХ рдЧреБрдгреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдЧреНрд░реИрдбрд▓ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рд╣рдо рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рдирдП рдЧреБрдгреЛрдВ рдХреЛ рднреА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХрд╛рд░реНрдп рдСрдмреНрдЬреЗрдХреНрдЯ рдПрдХ рд╣реИрд╢ рддрд╛рд▓рд┐рдХрд╛ рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рднреА рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдирд╛рдо рдФрд░ рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рд╣рдо рдЧреБрдгреЛрдВ рдХреЛ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ (рдмрд╢рд░реНрддреЗ рдХрд┐ рд╣рдорд╛рд░реА рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдирд╛рдо рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдЧреБрдгреЛрдВ рдХреЗ рдирд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдШрд░реНрд╖ рди рдХрд░реЗрдВ)ред

рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ: рдХрд╛рд░реНрдп рдХрд╛рд░реНрдп createArtifactрдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ copyFilesред рд▓рдХреНрд╖реНрдп copyFilesрдХрдИ рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдирд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдЕрд╕реНрдерд╛рдпреА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдХреЙрдкреА рдХрд░рдирд╛ рд╣реИ, рдЬреЛcreateArtifactрдмрд╛рдж рдореЗрдВ рд╡рд┐рд░реВрдкрдг рд╕рд╛рдХреНрд╖реНрдп рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рд╡рд░реНрддрд┐рддред рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╕реВрдЪреА рдмрд┐рд▓реНрдб рдкреИрд░рд╛рдореАрдЯрд░ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд┐рдП рдЧрдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдиреЗ рд╡рд╛рд▓реА рдкреНрд░рдХрдЯ рд╕реВрдЪреА рдХреЛ рд╡рд┐рд░реВрдкрдг рд╕рд╛рдХреНрд╖реНрдп рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣рд╛рдВ рдЧрддрд┐рд╢реАрд▓ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ:

рдЙрджрд╛рд╣рд░рдг 31. рдмрд┐рд▓реНрдб рдлрд╝рд╛рдЗрд▓, рдЬреЛ рдПрдХ рдЧрддрд┐рд╢реАрд▓ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рддрд╛ рд╣реИ

 task copyFiles { //    ,   // (     ) fileManifest = [ 'data.csv', 'config.json' ] } task createArtifact(dependsOn: copyFiles) << { println "FILES IN MANIFEST: ${copyFiles.fileManifest}" } 

рдЙрджрд╛рд╣рд░рдг 32. рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдмрд┐рд▓реНрдб рдлрд╝рд╛рдЗрд▓ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИ

 d:\project>gradle -q createArtifact FILES IN MANIFEST: [data.csv, config.json] 

рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░


рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдкрд╣рд▓реЗ рдХрд╣рд╛, рд╕реЗрдХреНрд╢рди рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рд╣реИрдВ , рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рд░реНрдп рдХрд╛ рдПрдХ рдкреНрд░рдХрд╛рд░ рд╣реИред рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрд▓рд╛рд╡рд╛ DefaultTask, рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдиреЗ, рд╕рдВрдЧреНрд░рд╣ рдХрд░рдиреЗ, рдХрд╛рд░реНрдпрдХреНрд░рдо рдЪрд▓рд╛рдиреЗ рдФрд░ рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрд╛рд░реНрдп рд╣реИрдВред рдПрдХ рдХрд╛рд░реНрдп рдкреНрд░рдХрд╛рд░ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рдирд╛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рднрд╛рд╖рд╛ рдореЗрдВ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реБрдЖ рдмрд╣реБрдд рдХреБрдЫ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╡рд┐рд░рд╛рд╕рдд рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╕реЗ, рдЖрдкрдХреЛ рддреБрд░рдВрдд рдЕрдкрдиреЗ рдХрд╛рд░реНрдп рдореЗрдВ рдХреБрдЫ рдЧреБрдг рдФрд░ рддрд░реАрдХреЗ рдорд┐рд▓рддреЗ рд╣реИрдВред рдпрд╣ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рдмрд╣реБрдд рдЫреЛрдЯрд╛ рдХрд░рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ рдЕрднреА рднреА рдорд╣рд╛рди рд╣реИрдВред

рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдкреВрд░реНрдг рдкреНрд░рд▓реЗрдЦрди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдпрд╣рд╛рдВ рдкреНрд░рд╕реНрддреБрдд рд╕рд╛рдордЧреНрд░реА рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдкрд░реЗ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рд╣рдо рдЙрдкрдпреЛрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдХрдИ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░рдХрд╛рд░реЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред

рдкреНрд░рддрд┐рд▓рд┐рдкрд┐


рдХрд╛рд░реНрдп CopyрдПрдХ рд╕реНрдерд╛рди рд╕реЗ рджреВрд╕рд░реЗ рд╕реНрдерд╛рди рдкрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рддрд╛ рд╣реИред рд╕рд░рд▓рддрдо рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдирд╛рдо рдорд╛рд╕реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдпрд╛ рдмрд╛рд╣рд░ рдХрд░рдиреЗ рдкрд░ рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЗ рд╕рд╛рде, рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реЗ рджреВрд╕рд░реЗ рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рддрд╛ рд╣реИ:

рдЙрджрд╛рд╣рд░рдг 33. рдХрд┐рд╕реА рдХрд╛рд░реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг Copy

 task copyFiles(type: Copy) { from 'resources' into 'target' include '**/*.xml', '**/*.txt', '**/*.properties' } 

рдЬрд╛рд░


рдХрд╛рд░реНрдп Jarрд╕рдВрд╕рд╛рдзрди рдлрд╝рд╛рдЗрд▓реЛрдВ рд╕реЗ рдЬрд╛рд░ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рддрд╛ рд╣реИред рдПрдХ рдкреНрд░рд╕рд┐рджреНрдз рдирд╛рдо рдХреЗ рд╕рд╛рде рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХ рдХрд╛рд░реНрдп JarрдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ 'java'ред рдХрд╛рд░реНрдп * * .class рдлрд╝рд╛рдЗрд▓реЛрдВ рдФрд░ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдПрдХ рдЬрд╛рд░ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдирд╛рдо рдХреЗ рд╕рд╛рде рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдХрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдкреИрдХ рдХрд░рддрд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдо рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╕рд╣реЗрдЬрд╛ рдЧрдпрд╛ рд╣реИ build/libsред рдпрд╣ рдХрд╛рд░реНрдп рдЕрддреНрдпрдзрд┐рдХ рд▓рдЪреАрд▓рд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг 34. рдХрд┐рд╕реА рдХрд╛рд░реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг Jar

 apply plugin: 'java' task customJar(type: Jar) { manifest { attributes firstKey: 'firstValue', secondKey: 'secondValue' } archiveName = 'hello.jar' destinationDir = file("${buildDir}/jars") from sourceSets.main.output } 

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╕рдВрдЧреНрд░рд╣ рдирд╛рдо рдФрд░ рдЧрдВрддрд╡реНрдп рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред рдЙрд╕реА рддрд░рд╣, рдЖрдк рд╕рд░рд▓ рдЧреНрд░реВрд╡реА рд╢рдмреНрджрдХреЛрд╢реЛрдВ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рдХрдЯ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред JAR рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рдЙрд╕ рд▓рд╛рдЗрди рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реЛрддреА рд╣реИ, from sourceSets.main.outputрдЬрд┐рд╕рдореЗрдВ .class рдлрд╛рдЗрд▓реЗрдВ рд╣реЛрддреА рд╣реИрдВред рд╡рд┐рдзрд┐ fromрдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдкреНрд░рдпреБрдХреНрдд рд╡рд┐рдзрд┐ рдХреЗ рд╕рдорд╛рди рд╣реИ CopyTask, рдЬреЛ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рд╡рд░рдг рдХреЛ рдкреНрд░рдХрдЯ рдХрд░рддрд╛ рд╣реИ: рдХрд╛рд░реНрдп рдХреЛ рдХрд╛рд░реНрдп рд╕реЗ Jarрд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ Copyред рдЗрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдЬрд╛рдирдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рдЕрднреА рднреА рд╡реНрдпрд╛рдкрдХ рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдФрд░ рдХрдХреНрд╖рд╛рдУрдВ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдХреНрд░рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рджрд╕реНрддрд╛рд╡реЗрдЬ рдХреЛ рджреЗрдЦреЗ рдмрд┐рдирд╛ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд░реЗрдЦрд╛рдВрдХрд┐рдд рдХрд░рддрд╛ рд╣реИ Jarред

destinationDirрдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рджреА рдЧрдИ рд╣реИред рдпрд╣ рдЕрдзрд┐рдХ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╕рдВрдкрддреНрддрд┐ рдХреЛ destinationDirрдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рдерд╛ ред рд▓реЗрдХрд┐рди рд╕рдВрдкрддреНрддрд┐ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреА рд╣реИ java.io.Fileред рдмрдЪрд╛рд╡ рдХреЗ рд▓рд┐рдП рддрд░реАрдХрд╛ рдЖрддрд╛ рд╣реИfile(), рдЬреЛ рдЧреНрд░реЗрдб рдлрд╝рд╛рдЗрд▓ рдХреЗ рдмрд┐рд▓реНрдб рдХреЛрдб рдореЗрдВ рд╣рдореЗрд╢рд╛ рдЙрдкрд▓рдмреНрдз рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдХрд┐рд╕реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдХрдирд╡рд░реНрдЯ рдХрд░рддрд╛ рд╣реИ Fileред

рдпрд╛рдж рд░рдЦреЗрдВ, рдЖрдк рд╣рдореЗрд╢рд╛ рдРрд╕реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ docs/dsl/index.htmlрдЬреЛ рдорд╛рдирдХ рдЧреНрд░реЗрдб рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рдПрдХ рдХрд╛рд░реНрдп Jarред рдХрд╛рд░реНрдп рдХреА рд╕рднреА рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХрд╛ рд╡рд┐рд╡рд░рдг Jarрд╣рдорд╛рд░реЗ рдЕрдзреНрдпрд╛рдп рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдкрд░реЗ рд╣реИред

JavaExec


рдХрд╛рд░реНрдп JavaExecрдПрдХ рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рдПрдХ рдЬрд╛рд╡рд╛ рд╡рд░реНрдЧ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ main()ред рдХрдВрд╕реЛрд▓ рдЬрд╛рд╡рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓рд╛рдирд╛ рдПрдХ рдЙрдкрджреНрд░рд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдХрд╛рд░реНрдп рдЬрд╛рд╡рд╛ рдХрдВрд╕реЛрд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдЖрдкрдХреЗ рдмрд┐рд▓реНрдб рдореЗрдВ рдПрдХреАрдХреГрдд рдХрд░рдХреЗ рдЕрд╕реБрд╡рд┐рдзрд╛ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ:

рдЙрджрд╛рд╣рд░рдг 35. рдЧреНрд░реИрдбрд▓ рдХрд╛рд░реНрдп рдПрдХ рдЬрд╛рд╡рд╛ рдХрдВрд╕реЛрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░рддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг javaexec-task рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ )

 apply plugin: 'java' repositories { mavenCentral() } dependencies { compile 'commons-codec:commons-codec:1.6' runtime 'commons-codec:commons-codec:1.6' } task encode(type: JavaExec, dependsOn: classes) { main = 'org.gradle.example.commandline.MetaphoneEncoder' args = "The rain in Spain falls mainly in the plain".split().toList() classpath sourceSets.main.output.classesDir classpath configurations.runtime } 

 package org.gradle.example.commandline; import org.apache.commons.codec.language.Metaphone; public class MetaphoneEncoder { public static void main(String args[]) { Metaphone codec = new Metaphone(); String phrase = ""; String encoded = ""; for (String s : args) { phrase += s.toUpperCase() + " "; encoded += codec.encode(s) + " "; } System.out.println("PHRASE =" + phrase); System.out.println("ENCODED=" + encoded); } } 

encode classpath configurations.runtime . configurations , . runtime , . , ( compile ), , , , , . configurations Gradle , , .

рдмрд┐рд▓реНрдб рдлрд╝рд╛рдЗрд▓ рдореЗрдВ Apache Commons Codec рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкрд░ рдПрдХ рдмрд╛рд╣рд░реА рдирд┐рд░реНрднрд░рддрд╛ рдШреЛрд╖рд┐рдд рдХреА рдЧрдИ рд╣реИред рд╣рдо рдЕрдкрдиреА рдЬрд╛рд╡рд╛ рдлрд╝рд╛рдЗрд▓ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдлрд┐рд░ рд╕рдВрдХрд▓рд┐рдд .class рдлрд╝рд╛рдЗрд▓ рдФрд░ JAR рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рдкрде рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдмрдирд╛рддреЗ рд╣реИрдВред рдмрд┐рд▓реНрдб рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рдЙрд╕ рд╡рд░реНрдЧ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ рдЬрд┐рд╕рдореЗрдВ main()( org.gradle.example.commandline.MetaphoneEncoder) рд╡рд┐рдзрд┐ рд▓реЙрдиреНрдЪ рдХреА рдЬрд╛рдПрдЧреА , рдЗрд╕реЗ рд╕реВрдЪреА рдХреЗ рд░реВрдк рдореЗрдВ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкреИрд░рд╛рдореАрдЯрд░ рджреЗрдВ, рдФрд░ рдЖрд╡рд╢реНрдпрдХ рддрддреНрд╡реЛрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВ classpathред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╣рдо рд╕рд╢рд░реНрдд рд░реВрдк рд╕реЗ sourceSetsрдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдШреЛрд╖рд┐рдд рдореБрдЦреНрдп рдирд┐рд░реНрднрд░рддрд╛ рдФрд░ рдЙрдкрд▓рдмреНрдз рд╕рднреА рд╡рд░реНрдЧреЛрдВ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ runtimeред рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд╛рд░реНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╕реНрдереИрддрд┐рдХ рдирд┐рд░реНрднрд░рддрд╛ рд╕рд╣рд┐рдд рд╡рд┐рднрд┐рдиреНрди рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ рдХрдИ рдЕрдиреНрдп рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдкрд░ рднреА рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

рдХрд╕реНрдЯрдо рдХрд╛рд░реНрдп рдкреНрд░рдХрд╛рд░


рдХрднреА-рдХрднреА рдЧреНрд░реЗрдбреЗрд▓ рдХреЗ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреА рдХреНрд╖рдорддрд╛рдПрдВ рдЖрдкрдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рдлрд┐рд░ рдПрдХ рдХрд╕реНрдЯрдо рдХрд╛рд░реНрдп рдмрдирд╛рдирд╛ рд╕рдмрд╕реЗ рд╕реНрдкрд╖реНрдЯ рддрд░реАрдХрд╛ рд╣реЛрдЧрд╛ рдЬрд┐рд╕реЗ рдЖрдк рдЕрдкрдиреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЧреНрд░реИрдбрд▓ рдЖрдкрдХреЛ рдХрдИ рддрд░реАрдХреЛрдВ рд╕реЗ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╣рдо рджреЛ рд╕рдмрд╕реЗ рдЖрдо рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред

рдПрдХ рдмрд┐рд▓реНрдб рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдПрдХ рдХрд╕реНрдЯрдо рдХрд╛рд░реНрдп рдкреНрд░рдХрд╛рд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛


рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдкрдХреЗ рдмрд┐рд▓реНрдб рдореЗрдВ рдЖрдкрдХреЛ MySQL рдбреЗрдЯрд╛рдмреЗрд╕ рдкрд░ рд╡рд┐рднрд┐рдиреНрди рдХреНрд╡реЗрд░реАрдЬрд╝ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЧреНрд░реИрдбрд▓ рдореЗрдВ, рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдХрдИ рддрд░реАрдХреЛрдВ рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕ рдирд┐рд╖реНрдХрд░реНрд╖ рдкрд░ рдкрд╣реБрдВрдЪреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рдХрд╕реНрдЯрдо рдХрд╛рд░реНрдп рдмрдирд╛рдирд╛ рд╕рдмрд╕реЗ рдЕрднрд┐рд╡реНрдпрдВрдЬрдХ рд╕рдорд╛рдзрд╛рди рд╣реЛрдЧрд╛ред рдХрд╛рд░реНрдп рдмрдирд╛рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдпрд╣ рдШреЛрд╖рд┐рдд рдХрд░рдирд╛ рд╣реИ рдХрд┐ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:

рдЙрджрд╛рд╣рд░рдг 36. MySQL рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╕реНрдЯрдо рдХрд╛рд░реНрдп ( рдХрд╕реНрдЯрдо-рдХрд╛рд░реНрдп рдЙрджрд╛рд╣рд░рдг рд╕реЗ

 task createDatabase(type: MySqlTask) { sql = 'CREATE DATABASE IF NOT EXISTS example' } task createUser(type: MySqlTask, dependsOn: createDatabase) { sql = "GRANT ALL PRIVILEGES ON example.* TO exampleuser@localhost IDENTIFIED BY 'passw0rd'" } task createTable(type: MySqlTask, dependsOn: createUser) { username = 'exampleuser' password = 'passw0rd' database = 'example' sql = 'CREATE TABLE IF NOT EXISTS users (id BIGINT PRIMARY KEY, username VARCHAR(100))' } class MySqlTask extends DefaultTask { def hostname = 'localhost' def port = 3306 def sql def database def username = 'root' def password = 'password' @TaskAction def runQuery() { def cmd if(database) { cmd = "mysql -u ${username} -p${password} -h ${hostname} -P ${port} ${database} -e " } else { cmd = "mysql -u ${username} -p${password} -h ${hostname} -P ${port} -e " } project.exec { commandLine = cmd.split().toList() + sql } } } 

MySqlTask DefaultTask . DefaultTask , . ( , DefaultTask . . , .) Groovy, ( hostname , database , sql ..). runQuery() , @TaskAction . runQuery() .

, , MySqlTask . , . ( username password , , ), , , . createDatabase createUser SQL-, .

createTable username , password database . , , . , , Gradle.


рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛рд░реНрдп рдмрд╣реБрдд рдмрдбрд╝рд╛ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдХреЛрдб рдмрд┐рд▓реНрдб рдлрд╝рд╛рдЗрд▓ рдХреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдЬрдЯрд┐рд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдПрдХ рдХрд╛рд░реНрдп рдореЗрдВ рд╕рд░рд▓ рдХреЛрдб рдХреА рдХрдИ рд▓рд╛рдЗрдиреЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЪрд░рдг рдореЗрдВ, рдХрд╛рд░реНрдп рдмрд╛рд╣рд░реА рдПрдкреАрдЖрдИ рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рдФрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкрд░реАрдХреНрд╖рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╡рд░реНрдЧ рдкрджрд╛рдиреБрдХреНрд░рдо рдореЗрдВ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдмрд┐рд▓реНрдб рдХреЛрдб рд╣реИ, рдФрд░ рдЬрдЯрд┐рд▓ рдмрд┐рд▓реНрдб рдХреЛрдб рдХреЛ рдХреЛрдб рд╡рд┐рдХрд╛рд╕ рдХреА рджреБрдирд┐рдпрд╛ рдХреЗ рдкреВрд░реНрдг рдирд┐рд╡рд╛рд╕реА рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЧреНрд░реИрдбрд▓ рдореЗрдВ рдРрд╕рд╛ рдХрд╛рд░реНрдп рдмрд╕ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛рд░реНрдп рдХрд╛ рддрд░реНрдХ рдмрд┐рд▓реНрдб рдлрд╝рд╛рдЗрд▓ рдХреА рдЙрдЪрд┐рдд рд╕реАрдорд╛рдУрдВ рд╕реЗ рдЖрдЧреЗ рдмрдврд╝рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдЗрд╕реЗ buildSrcрдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдЬрдбрд╝ рдореЗрдВ рд╕реНрдерд┐рдд рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред рдпрд╣ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ рдФрд░ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╡рд░реНрдЧрдкрде рдореЗрдВ рдЬреЛрдбрд╝ рджреА рдЬрд╛рддреА рд╣реИред рд╣рдо рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ buildSrc:

рдЙрджрд╛рд╣рд░рдг 37. рдмрд╛рд╣рд░реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛рд░реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ

 task createDatabase(type: MySqlTask) { sql = 'CREATE DATABASE IF NOT EXISTS example' } task createUser(type: MySqlTask, dependsOn: createDatabase) { sql = "GRANT ALL PRIVILEGES ON example.* TO exampleuser@localhost IDENTIFIED BY 'passw0rd'" } task createTable(type: MySqlTask, dependsOn: createUser) { username = 'exampleuser' password = 'passw0rd' database = 'example' sql = 'CREATE TABLE IF NOT EXISTS users (id BIGINT PRIMARY KEY, username VARCHAR(100))' } 

рдЙрджрд╛рд╣рд░рдг 38. рдХрд┐рд╕реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛рд░реНрдп рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ buildSrc

 import org.gradle.api.DefaultTask import org.gradle.api.tasks.TaskAction class MySqlTask extends DefaultTask { def hostname = 'localhost' def port = 3306 def sql def database def username = 'root' def password = 'password' @TaskAction def runQuery() { def cmd if(database) { cmd = "mysql -u ${username} -p${password} -h ${hostname} -P ${port} ${database} -e " } else { cmd = "mysql -u ${username} -p${password} -h ${hostname} -P ${port} -e " } project.exec { commandLine = cmd.split().toList() + sql } } } 

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдХрд╛рд░реНрдп рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ buildSrcрдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдВрддрд┐рдо рд╕реЗ рдкрд╣рд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдмрд┐рд▓реНрдб рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХреЛрдб рдХреЗ рд╕рд╛рде рдореЗрд▓ рдЦрд╛рддреА рд╣реИ ред рдлрд┐рд░ рднреА, рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдХрд╛рд░реНрдп рдпреЛрдЧреНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рдВрд░рдЪрдирд╛ рд╣реИ рдЬреЛ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдХрд╛рд░реНрдп рдХреЗ рдХреЛрдб рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИ, рдСрдмреНрдЬреЗрдХреНрдЯ рдореЙрдбрд▓ рдХрд╛ рдирд┐рд░реНрдорд╛рдг, рдкрд░реАрдХреНрд╖рдг рдФрд░ рдмрд╛рдХреА рд╕рдм рдХреБрдЫ рдЬреЛ рд╣рдо рдЖрдорддреМрд░ рдкрд░ рдХреЛрдб рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп рдХрд░рддреЗ рд╣реИрдВред

, - Gradle. тАФ , -, . тАФ buildSrc , . тАФ - -. тАФ , Java Goovy. Gradle тАФ , .

39. Gradle, , buildSrc

 . тФЬтФАтФА build.gradle тФЬтФАтФА buildSrc тФВ тФФтФАтФА src тФВ тФФтФАтФА main тФВ тФФтФАтФА groovy тФВ тФФтФАтФА org тФВ тФФтФАтФА gradle тФВ тФФтФАтФА example тФВ тФФтФАтФА task тФВ тФФтФАтФА MySqlTask.groovy 



рдЕрдм рддрдХ, рд╣рдордиреЗ рдЧреНрд░реЗрдб рдмрд┐рд▓реНрдб рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рдореЗрдВ рдпрд╛ buildSrcрдЧреНрд░реВрд╡реА рдХреЛрдб рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╕реАрдзреЗ рдХреЛрдб рд▓рд┐рдЦрдХрд░ рдХрд╛рд░реНрдп рдмрдирд╛рдП рд╣реИрдВ ред рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдЕрдзреНрдпрдпрди рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЙрдирдХреА рд╕рднреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХрд╛рд░реНрдп рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдирд╣реАрдВ рд▓рд┐рдЦреЗ рдЬрд╛рдПрдВрдЧреЗред рд╡реЗ рдмрд╛рд╣рд░реА рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдЖрдпрд╛рдд рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред рдЬрд╛рд╡рд╛ рдореЗрдВ

рдХрдВрд╕реЛрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЕрд╕реЗрдВрдмрд▓ рдХрд░рдиреЗ рдХреЗ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ HelloWorld, рдмрд┐рд▓реНрдб рдлрд╝рд╛рдЗрд▓ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ:

 apply plugin: 'java' 

Java, - , . , doFirst() doLast() , . Gradle . Gradle , , Gradle DSL (DSL тАФ Domain Specific Language), Groovy.

, Gradle , tasks properties . . Gradle DSL.

рдирд┐рд╖реНрдХрд░реНрд╖


рдЗрд╕ рдЕрдзреНрдпрд╛рдп рдореЗрдВ, рд╣рдордиреЗ рдкрд░реНрдпрд╛рдкреНрдд рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХреАред рд╣рдореЗрдВ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдЧреНрд░реИрдбрд▓ рдЬреАрд╡рди рдЪрдХреНрд░ рдХреЗ рджреЛ рдЪрд░рдгреЛрдВ рдХреЗ рдмреАрдЪ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдХреИрд╕реЗ рдЕрд▓рдЧ рдХрд░рддрд╛ рд╣реИред рд╣рдордиреЗ рджреЗрдЦрд╛ рдХрд┐ рдПрдХ рд╕рдореГрджреНрдз рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдп рдкреВрд░реНрдг рдЧреНрд░реВрд╡реА рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИрдВред рд╣рдордиреЗ рдПрдкреАрдЖрдИ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкрд░реНрдпрд╛рдкреНрдд рдорд╛рддреНрд░рд╛ рдореЗрдВ рдорд╛рдирд╛ рд╣реИ рддрд╛рдХрд┐ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдЙрди рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдиреБрднрд╡ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХреЗрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рдордиреЗ рдХреБрдЫ рдорд╛рдирдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреА рднреА рдЬрд╛рдВрдЪ рдХреА, рдЬреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рдмрд┐рдирд╛ рднреА рдХрд╛рдлреА рдХрд╛рд░реНрдпрд╢реАрд▓ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред

рдЕрдВрдд рдореЗрдВ, рд╣рдореЗрдВ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ рдХреИрд╕реЗ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдзрд┐рдХрд╛рдВрд╢ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рдорд╛рдирдХ рдореЙрдбреНрдпреВрд▓ рдХреНрд╖рдорддрд╛рдПрдВ рдФрд░ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрд╛рд░реНрдп рдЧреНрд░реЗрдбрд▓ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИрдВ, рдФрд░ рдЖрдк рдмрд┐рд▓реНрдб рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╕реНрдЯрдо рдХреЛрдб рдирд╣реАрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдкрд╡рд╛рдж рд╣реЛрддреЗ рд╣реИрдВред рдЧреНрд░реИрдбрд▓ рдХреА рдкреНрд░рдореБрдЦ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдЧреНрд░реЛрд╡реА рд╣рд╛рд░реНрдб-рдЯреВ-рдореЗрдВрдЯреЗрди рдХреЛрдб рдХреЗ рд╕рд╛рде рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдиреЗ рдореЗрдВ рдЕрд░рд╛рдЬрдХрддрд╛ рдкреИрджрд╛ рдХрд┐рдП рдмрд┐рдирд╛ рдЕрдкрдиреА рдирд┐рд░реНрдорд╛рдг рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдЙрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬрд┐рдирдХреА рд╣рдордиреЗ рдЬрд╛рдВрдЪ рдХреА рдереАред

рдЧреНрд░реИрдбрд▓ рдореЗрдВ, рдХрд╛рд░реНрдп рдирд┐рд░реНрдорд╛рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдореВрд▓рднреВрдд рдЗрдХрд╛рдЗрдпрд╛рдБ рд╣реИрдВред рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рднреА рдмрд╣реБрдд рдХреБрдЫ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛ рдХрд╡рд░ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред рдлрд┐рд░ рднреА, рд╢рд╕реНрддреНрд░рд╛рдЧрд╛рд░ рдореЗрдВ рдЗрд╕ рдЕрдзреНрдпрд╛рдп рдореЗрдВ рдЬреНрдЮрд╛рди рд╣реЛрдиреЗ рд╕реЗ, рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╢реБрд░реВ рдХрд░рдиреЗ рдФрд░ рдЙрдирдХреЗ рдЖрдЧреЗ рдХреЗ рдЕрдзреНрдпрдпрди рдХреЛ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рддреИрдпрд╛рд░ рд╣реИрдВред

рдЬрд┐рди рд▓реЛрдЧреЛрдВ рдХреЗ рдкрд╛рд╕ рдкрд╛рда рдХреЛ рд╕реБрдзрд╛рд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдЪрд╛рд░ рд╣реИрдВ,
рд╕рд╛рде рд╣реА рдЬреЛ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдкрд╛рддреЗ рд╣реИрдВ, рдЙрдирдХрд╛
рд╕реНрд╡рд╛рдЧрдд рд╣реИ GitHub ред


рдЯрд╛рдЗрдкреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдХрд┐рддрд╛_рд░реЛрдЧрддреНрдиреЗрд╡ рдХреЛ рд╡рд┐рд╢реЗрд╖ рдзрдиреНрдпрд╡рд╛рдж ред

Source: https://habr.com/ru/post/In167227/


All Articles