Maven Build Lifecycle: කම්මැලි නැතුව ඉගෙන ගමු! (Learn Maven Build Lifecycle without boredom!)

Maven Build Lifecycle: කම්මැලි නැතුව ඉගෙන ගමු! (Learn Maven Build Lifecycle without boredom!)

ඉතින් කොහොමද යාලුවනේ! අද අපි කතා කරන්න යන්නේ software development වලදී නැතුවම බැරි tool එකක් ගැන. ඒ තමයි Apache Maven. විශේෂයෙන්ම, Maven Build Lifecycle එක ගැන අපි හොඳටම බලමු. අලුතින් code කරන අයට වගේම, දැනටමත් code කරන අයටත් මේක ගොඩක් වැදගත් වෙයි. කලින් දවස් වල, project එකක් build කරනවා කියන්නේ හරිම headache එකක්. dependencies add කරනවා, JAR files download කරනවා, classpath set කරනවා... මේ හැමදේම manual කරන්න ගියාම වෙලාව නාස්ති වෙනවා වගේම වැරදි වෙන්න තියෙන ඉඩත් වැඩියි. අන්න ඒ වගේ තැනකදී තමයි Maven වීරයෙක් වගේ එන්නේ.

Maven කියන්නේ මොකක්ද?

Maven කියන්නේ Apache Software Foundation එකෙන් හදපු powerful build automation tool එකක්. Java project එකක් build කරනවා කියන්නේ, source code එක compile කරනවා, tests run කරනවා, package කරනවා (JAR, WAR වගේ), අන්තිමට install කරනවා වගේ වැඩ ගොඩක් තියෙනවා. මේ හැමදේම automate කරන්න තමයි Maven පාවිච්චි කරන්නේ.

Dependency management කියන එකත් Maven වල තියෙන සුපිරි feature එකක්. Library එකක් ඕන වුණාම manual download කරලා classpath එකට add කරනවා වෙනුවට, Maven ඒක automate කරනවා. ඔයාලට project එකට ඕන library එකක් තියෙනවා නම්, pom.xml (Project Object Model) එකට dependency එක add කරාම ඇති. Maven අනිත් ඔක්කොම බලාගන්නවා. ඒක තමයි dependency transitiviy කියන්නේ.

Maven ගොඩක් වෙලාවට 'convention over configuration' කියන principle එක follow කරනවා. ඒ කියන්නේ, standard project structure එකක් follow කරනවා නම්, අපිට වෙනම ගොඩක් configuration කරන්න ඕනේ නැහැ. Maven ඒ දේවල් තේරුම් අරගෙන project එක build කරනවා.

Maven Build Lifecycle එක මොකක්ද?

Maven වලදී project එකක් build කරනකොට, ඒක හරියට පියවර ගොඩකින් යන ගමනක් වගේ. මේකට තමයි Maven Build Lifecycle එක කියන්නේ. Maven වල ප්‍රධාන built-in build lifecycles තුනක් තියෙනවා:

  • default (or build): මේක තමයි project එක build කරලා deploy කරන්න ඕන කරන steps තියෙන ප්‍රධාන lifecycle එක. අද අපි වැඩිපුරම බලන්නේ මේක ගැනයි.

site: මේකෙන් කරන්නේ project documentation generate කරන එක.

mvn site

clean: මේකෙන් කරන්නේ කලින් build කරපු files (සාමාන්‍යයෙන් target directory එකේ තියෙන files) ඔක්කොම අයින් කරන එක. අලුතින් build එකක් පටන් ගන්න කලින් මේක කරන්න පුළුවන්.

mvn clean

default lifecycle එකේ තියෙන හැම phase එකක්ම පිළිවෙලට run වෙනවා. ඒ කියන්නේ, ඔයාලා install phase එක run කරන්න කියලා command එක දුන්නොත්, Maven මුලින්ම validate, ඊට පස්සේ compile, ඊට පස්සේ test, package වගේ හැම phase එකක්ම පිළිවෙලට run කරලා තමයි install phase එකට එන්නේ. ඒ වගේම, හැම phase එකකටම යටතේ goals තියෙනවා. goals කියන්නේ plugin එකක් කරන specific task එකක්.

ප්‍රධාන Maven Build Phases ටික

දැන් අපි බලමු default lifecycle එකේ තියෙන ප්‍රධාන phases මොනවද කියලා:

validate

මේක තමයි build lifecycle එකේ මුල්ම phase එක. මේකෙන් කරන්නේ project එකේ POM (Project Object Model) එක හරි විදිහට configure කරලා තියෙනවද, අවශ්‍ය dependencies ඔක්කොම specify කරලා තියෙනවද වගේ දේවල් check කරන එක. project එක build කරන්න කලින් අවම අවශ්‍යතා තියෙනවද කියලා බලන්නේ මෙතනදී.

mvn validate

compile

මේක තමයි ඔයාලා ලියපු Java source code files, Java Virtual Machine (JVM) එකට තේරෙන bytecode (.class files) බවට convert කරන phase එක. මේ files තියෙන්නේ සාමාන්‍යයෙන් src/main/java කියන directory එකේ. Compile කරපු files ටික target/classes කියන directory එකේ save වෙනවා.

mvn compile

test

Project එක compile කරාට පස්සේ, ඒක හරියට වැඩ කරනවද කියලා බලන්න tests run කරන්න ඕනේ. test phase එකෙන් කරන්නේ project එකේ unit tests run කරන එක. මේ tests තියෙන්නේ src/test/java කියන directory එකේ. සාමාන්‍යයෙන් JUnit, TestNG වගේ test frameworks මේකට පාවිච්චි කරනවා. මේ tests fail වුනොත් build එක fail වෙනවා.

mvn test

Tests skip කරන්න ඕන නම්, මේ විදිහට command එක දෙන්න පුළුවන්:

mvn install -DskipTests

package

මේ phase එක තමයි ඔයාලගේ compiled code එකයි, resources (properties files, XML files, images වගේ) ටිකයි එකතු කරලා project එක share කරන්න පුළුවන් format එකකට හදන phase එක. සාමාන්‍යයෙන් Java application එකක් නම් JAR (Java Archive) file එකක්, web application එකක් නම් WAR (Web Archive) file එකක්, enterprise application එකක් නම් EAR (Enterprise Archive) file එකක් විදිහට මේක හැදෙනවා. මේ artifact එක save වෙන්නේ target directory එකේ.

mvn package

verify

Package කරපු artifact එක integration tests වලින් quality check කරන phase එක තමයි මේක. Unit tests වලින් individual components check කරනවා වගේ නෙවෙයි, integration tests වලින් system එකේ components එකිනෙකට සම්බන්ධ වෙලා හරියට වැඩ කරනවද කියලා බලනවා.

mvn verify

install

හදපු package එක (JAR/WAR file එක) ඔයාලගේ local Maven repository එකට install කරන phase එක. මේ local repository එක සාමාන්‍යයෙන් තියෙන්නේ ~/.m2/repository කියන path එකේ. මේකෙන් වෙන්නේ, ඔයාලගේ මේ project එක වෙනත් project එකකට dependency එකක් විදිහට පාවිච්චි කරන්න පුළුවන් වෙන එකයි.

mvn install

deploy

මේක තමයි build lifecycle එකේ අන්තිම phase එක. මේකෙන් කරන්නේ local repository එකට install කරපු artifact එක remote repository එකකට deploy කරන එක. Artifactory, Nexus වගේ repository managers තමයි මේකට පාවිච්චි කරන්නේ. මේකෙන් team එකේ අනිත් අයටත් මේ artifact එක share කරගන්න පුළුවන් වෙනවා.

mvn deploy

සාමාන්‍යයෙන් ඔයාලා project එකක් build කරනකොට පාවිච්චි කරන command එක තමයි:

mvn clean install

මේ command එකෙන් වෙන්නේ, මුලින්ම clean lifecycle එක run කරලා කලින් build කරපු දේවල් ඔක්කොම අයින් කරනවා. ඊට පස්සේ install phase එකට යනකල් default lifecycle එකේ හැම phase එකක්ම (validate, compile, test, package, verify, install) පිළිවෙලට run වෙනවා.

Goals සහ Phases අතර වෙනස

මේක තමයි ගොඩක් අයට පැටලෙන තැන. පැහැදිලිවම කිව්වොත්, Phase කියන්නේ build lifecycle එකේ step එකක්. ඒක sequence එකක්. Goal කියන්නේ specific task එකක්. උදාහරණයක් විදිහට, compiler:compile කියන goal එකෙන් කරන්නේ Java source code compile කරන එක. මේ compiler:compile goal එක compile phase එකට bind වෙලා තියෙනවා.

අපිට mvn compile කියලා කිව්වම, Maven compile phase එකට bind වෙලා තියෙන compiler:compile goal එක run කරනවා. ඒ වගේම, mvn test කිව්වම, Maven test phase එකට bind වෙලා තියෙන surefire:test goal එක run කරනවා.

එක phase එකකට goals එකක් හෝ කිහිපයක් bind වෙන්න පුළුවන්. ඒ වගේම, අපිට direct goal එකක් execute කරන්නත් පුළුවන්. mvn compiler:compile වගේ. එතකොට අදාල goal එක විතරක් run වෙනවා. Phases හැමවිටම පිළිවෙලට run වෙනවා. Goals run වෙන්නේ අපි කියන විදිහට (phase එකක් හරහා හෝ direct).

නිරරනය

ඉතින් යාලුවනේ, Maven Build Lifecycle එක කියන්නේ මොකක්ද, ඒකේ තියෙන ප්‍රධාන phases මොනවද, ඒවයින් මොකක්ද වෙන්නේ කියන එක ගැන දැන් ඔයාලට හොඳ අවබෝධයක් ඇති කියලා හිතනවා. මේ concepts ටික තේරුම් ගන්න එක ඔයාලගේ project build process එක වඩා හොඳින් තේරුම් ගන්නත්, troubleshoot කරන්නත්, customize කරන්නත් ගොඩක් උදව් වෙයි. Maven build lifecycle එක හරියට තේරුම් ගන්න එක, ඔයාලගේ project build process එක speed up කරගන්න, automatic කරන්න, bugs අඩු කරගන්න ගොඩක් උදව් වෙනවා. ඒ වගේම continuous integration (CI) environments වලදී මේකේ වැදගත්කම තවත් වැඩි වෙනවා.

දැන් ඔයාලත් පොඩි Maven project එකක් හදලා මේ phases ටික run කරලා බලන්න. මොනවා හරි ප්‍රශ්න තියෙනවා නම් නැත්නම් අලුතින් දෙයක් ඉගෙනගත්තා නම් comment section එකේ කියන්න අමතක කරන්න එපා. අපි ආයෙත් මේ වගේම වැදගත් දෙයක් ගැන කතා කරමු. එහෙනම්, පරිස්සමින් ඉන්න!