{"id":31176,"date":"2025-10-06T21:41:31","date_gmt":"2025-10-06T18:41:31","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=31176"},"modified":"2025-10-06T21:41:31","modified_gmt":"2025-10-06T18:41:31","slug":"exec-maven-plugin-maven-build-surecinde-java-programlarini-calistirma-rehberi","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/exec-maven-plugin-maven-build-surecinde-java-programlarini-calistirma-rehberi\/","title":{"rendered":"Exec Maven Plugin: Maven Build S\u00fcrecinde Java Programlar\u0131n\u0131 \u00c7al\u0131\u015ft\u0131rma Rehberi"},"content":{"rendered":"<p><body><\/p>\n<h2>Exec Maven Plugin: Maven Build S\u00fcrecinde Java Programlar\u0131n\u0131 \u00c7al\u0131\u015ft\u0131rma Rehberi<\/h2>\n<p>Maven, Java projeleri i\u00e7in end\u00fcstri standard\u0131 bir build otomasyon arac\u0131d\u0131r. Ba\u011f\u0131ml\u0131l\u0131k y\u00f6netimi, derleme, test etme, paketleme ve da\u011f\u0131tma gibi bir\u00e7ok g\u00f6revi standartla\u015ft\u0131r\u0131lm\u0131\u015f bir \u015fekilde ele al\u0131r. Ancak Maven&#8217;\u0131n ger\u00e7ek g\u00fcc\u00fc, &#8220;plugin&#8221; ad\u0131 verilen geni\u015fletilebilir mimarisinde yatar. Plugin&#8217;ler, Maven&#8217;\u0131n \u00e7ekirdek yeteneklerini geni\u015fletir ve geli\u015ftiricilere projelerinin ya\u015fam d\u00f6ng\u00fcs\u00fc boyunca \u00e7e\u015fitli \u00f6zel g\u00f6revleri yerine getirme imkan\u0131 sunar. Bu makalede, Maven&#8217;\u0131n en kullan\u0131\u015fl\u0131 plugin&#8217;lerinden biri olan &#8220;Exec Maven Plugin&#8221;i derinlemesine inceleyece\u011fiz. Bu plugin, Maven build s\u00fcrecinin herhangi bir a\u015famas\u0131nda Java programlar\u0131n\u0131 veya harici komutlar\u0131 \u00e7al\u0131\u015ft\u0131rmak i\u00e7in tasarlanm\u0131\u015ft\u0131r.<\/p>\n<h3>Maven ve Plugin Mekanizmas\u0131<\/h3>\n<p>Maven, proje y\u00f6netimini ve build s\u00fcrecini basitle\u015ftirmek i\u00e7in &#8220;Project Object Model&#8221; (POM) ad\u0131 verilen XML tabanl\u0131 bir yap\u0131 kullan\u0131r. POM dosyas\u0131 (<code>pom.xml<\/code>), projenin t\u00fcm konfig\u00fcrasyonunu, ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131, plugin&#8217;lerini ve build profilini tan\u0131mlar. Maven&#8217;\u0131n \u00e7al\u0131\u015fma prensibi, bir ya\u015fam d\u00f6ng\u00fcs\u00fc (lifecycle) etraf\u0131nda d\u00f6ner. Bu ya\u015fam d\u00f6ng\u00fcs\u00fc, <code>validate<\/code>, <code>compile<\/code>, <code>test<\/code>, <code>package<\/code>, <code>install<\/code>, <code>deploy<\/code> gibi \u00f6nceden tan\u0131mlanm\u0131\u015f a\u015famalardan (phases) olu\u015fur.<\/p>\n<p>Plugin&#8217;ler, Maven&#8217;\u0131n bu ya\u015fam d\u00f6ng\u00fcs\u00fcne entegre olan ve belirli g\u00f6revleri (goals) yerine getiren mod\u00fcler bile\u015fenlerdir. Her plugin, bir veya daha fazla &#8220;goal&#8221; i\u00e7erir. \u00d6rne\u011fin, <code>maven-compiler-plugin<\/code>&#8216;in <code>compile<\/code> goal&#8217;\u00fc, Java kaynak kodunu derler. Bu goal, genellikle <code>compile<\/code> ya\u015fam d\u00f6ng\u00fcs\u00fc faz\u0131na ba\u011flan\u0131r. Geli\u015ftiriciler, <code>pom.xml<\/code> dosyas\u0131nda plugin&#8217;leri tan\u0131mlayarak ve onlar\u0131 belirli ya\u015fam d\u00f6ng\u00fcs\u00fc fazlar\u0131na ba\u011flayarak build s\u00fcrecini \u00f6zelle\u015ftirebilirler. Bir plugin&#8217;i kullanmak i\u00e7in, genellikle <code><build><\/code> etiketinin alt\u0131nda <code><plugins><\/code> b\u00f6l\u00fcm\u00fcne eklenir ve <code><configuration><\/code> etiketi alt\u0131nda \u00e7e\u015fitli parametrelerle ayarlan\u0131r.<\/p>\n<p>Exec Maven Plugin de bu mekanizman\u0131n bir par\u00e7as\u0131d\u0131r. Temel amac\u0131, Maven&#8217;\u0131n kontrol\u00fc alt\u0131nda harici programlar\u0131 \u00e7al\u0131\u015ft\u0131rmakt\u0131r. Bu programlar bir Java s\u0131n\u0131f\u0131 olabilece\u011fi gibi, bir shell scripti, Python scripti veya herhangi bir y\u00fcr\u00fct\u00fclebilir dosya da olabilir. Bu esneklik, geli\u015ftiricilere build s\u00fcrecine \u00f6zel otomasyon ad\u0131mlar\u0131 eklemeleri i\u00e7in g\u00fc\u00e7l\u00fc bir ara\u00e7 sunar.<\/p>\n<h3>Exec Maven Plugin&#8217;e Giri\u015f<\/h3>\n<p>Exec Maven Plugin, Maven build s\u00fcrecinden ba\u011f\u0131ms\u0131z Java uygulamalar\u0131n\u0131 veya harici sistem komutlar\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rmak i\u00e7in tasarlanm\u0131\u015ft\u0131r. Bu, \u00f6zellikle a\u015fa\u011f\u0131daki senaryolarda son derece faydal\u0131d\u0131r:<\/p>\n<p>*   <strong>Ana Uygulamay\u0131 \u00c7al\u0131\u015ft\u0131rma:<\/strong> Bir Maven projesinin ana Java s\u0131n\u0131f\u0131n\u0131 do\u011frudan Maven komutuyla \u00e7al\u0131\u015ft\u0131rmak.<br \/>\n*   <strong>Yard\u0131mc\u0131 Programlar ve Scriptler:<\/strong> Build s\u00fcrecinin bir par\u00e7as\u0131 olarak veritaban\u0131 migrasyonlar\u0131, kod \u00fcretimi, dosya i\u015fleme gibi yard\u0131mc\u0131 scriptleri veya programlar\u0131 \u00e7al\u0131\u015ft\u0131rmak.<br \/>\n*   <strong>Entegrasyon Testleri:<\/strong> Entegrasyon testlerinden \u00f6nce bir test sunucusu ba\u015flatmak veya test verilerini haz\u0131rlamak.<br \/>\n*   <strong>\u00d6zel Build Ad\u0131mlar\u0131:<\/strong> Maven&#8217;\u0131n standart ya\u015fam d\u00f6ng\u00fcs\u00fcne uymayan \u00f6zel ad\u0131mlar\u0131 entegre etmek.<\/p>\n<p>Exec Maven Plugin&#8217;i projenize eklemek i\u00e7in <code>pom.xml<\/code> dosyan\u0131z\u0131n <code><build><\/code> b\u00f6l\u00fcm\u00fcne a\u015fa\u011f\u0131daki gibi bir <code><plugin><\/code> giri\u015fi eklemeniz gerekir:<\/p>\n<pre><code class=\"language-xml\"><build>\n    <plugins>\n        <plugin>\n            <groupId>org.codehaus.mojo<\/groupId>\n            <artifactId>exec-maven-plugin<\/artifactId>\n            <version>3.1.1<\/version> <!-- G\u00fcncel versiyonu kontrol edin -->\n            <executions>\n                <!-- \u0130ste\u011fe ba\u011fl\u0131: Plugin'i ya\u015fam d\u00f6ng\u00fcs\u00fcne ba\u011flamak i\u00e7in -->\n                <execution>\n                    <goals>\n                        <goal>java<\/goal>\n                    <\/goals>\n                <\/execution>\n            <\/executions>\n            <configuration>\n                <!-- Plugin konfig\u00fcrasyonlar\u0131 buraya gelecek -->\n            <\/configuration>\n        <\/plugin>\n    <\/plugins>\n<\/build><\/code><\/pre>\n<p>Yukar\u0131daki \u00f6rnekte, <code>groupId<\/code>, <code>artifactId<\/code> ve <code>version<\/code> ile plugin&#8217;i tan\u0131mlad\u0131k. <code><executions><\/code> b\u00f6l\u00fcm\u00fc, plugin&#8217;in belirli bir Maven ya\u015fam d\u00f6ng\u00fcs\u00fc faz\u0131nda \u00e7al\u0131\u015ft\u0131r\u0131lmas\u0131n\u0131 sa\u011flar, ancak bu iste\u011fe ba\u011fl\u0131d\u0131r. Genellikle, plugin&#8217;i do\u011frudan komut sat\u0131r\u0131ndan \u00e7al\u0131\u015ft\u0131rmak i\u00e7in bu b\u00f6l\u00fcm gerekli de\u011fildir. <code><configuration><\/code> etiketi ise plugin&#8217;in davran\u0131\u015f\u0131n\u0131 \u00f6zelle\u015ftirmek i\u00e7in kullan\u0131l\u0131r.<\/p>\n<p>Exec Maven Plugin&#8217;in iki ana goal&#8217;\u00fc vard\u0131r:<\/p>\n<p>1.  <strong><code>java<\/code> goal&#8217;\u00fc:<\/strong> Bir Java s\u0131n\u0131f\u0131n\u0131 ayr\u0131 bir JVM s\u00fcrecinde \u00e7al\u0131\u015ft\u0131rmak i\u00e7in kullan\u0131l\u0131r. Bu goal, genellikle projenin kendi Java s\u0131n\u0131flar\u0131n\u0131 veya ba\u011f\u0131ml\u0131l\u0131klar\u0131ndaki s\u0131n\u0131flar\u0131 \u00e7al\u0131\u015ft\u0131rmak i\u00e7in tercih edilir. Classpath y\u00f6netimi Maven taraf\u0131ndan otomatik olarak yap\u0131l\u0131r.<br \/>\n2.  <strong><code>exec<\/code> goal&#8217;\u00fc:<\/strong> Herhangi bir harici program\u0131 veya scripti \u00e7al\u0131\u015ft\u0131rmak i\u00e7in kullan\u0131l\u0131r. Bu, <code>java<\/code> komutu, <code>sh<\/code> scriptleri, <code>python<\/code> programlar\u0131 veya herhangi bir y\u00fcr\u00fct\u00fclebilir dosya olabilir. Classpath y\u00f6netimi genellikle manuel olarak veya harici program\u0131n kendi mekanizmalar\u0131yla yap\u0131l\u0131r.<\/p>\n<h3>Farkl\u0131 \u00c7al\u0131\u015ft\u0131rma Senaryolar\u0131 ve Konfig\u00fcrasyonlar<\/h3>\n<p>Exec Maven Plugin, \u00e7e\u015fitli senaryolara uyacak \u015fekilde zengin konfig\u00fcrasyon se\u00e7enekleri sunar. \u015eimdi bu senaryolar\u0131 ve ilgili konfig\u00fcrasyonlar\u0131 detayl\u0131ca inceleyelim.<\/p>\n<h4>Tek Bir Java S\u0131n\u0131f\u0131n\u0131 \u00c7al\u0131\u015ft\u0131rma (<code>java<\/code> goal&#8217;\u00fc)<\/h4>\n<p>Exec Maven Plugin&#8217;in <code>java<\/code> goal&#8217;\u00fc, projenizin veya ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131z\u0131n classpath&#8217;\u0131nda bulunan bir Java s\u0131n\u0131f\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rman\u0131n en basit yoludur. Bu, genellikle projenizin ana uygulamas\u0131n\u0131 ba\u015flatmak veya k\u00fc\u00e7\u00fck bir yard\u0131mc\u0131 Java program\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rmak i\u00e7in kullan\u0131l\u0131r.<\/p>\n<pre><code class=\"language-xml\"><plugin>\n    <groupId>org.codehaus.mojo<\/groupId>\n    <artifactId>exec-maven-plugin<\/artifactId>\n    <version>3.1.1<\/version>\n    <configuration>\n        <mainClass>com.example.myapp.MyApplication<\/mainClass>\n        <arguments>\n            <argument>arg1<\/argument>\n            <argument>arg2<\/argument>\n        <\/arguments>\n        <systemProperties>\n            <systemProperty>\n                <key>my.property<\/key>\n                <value>myValue<\/value>\n            <\/systemProperty>\n        <\/systemProperties>\n        <classpathScope>runtime<\/classpathScope> <!-- Varsay\u0131lan: runtime -->\n    <\/configuration>\n<\/plugin><\/code><\/pre>\n<p>Yukar\u0131daki konfig\u00fcrasyonda:<\/p>\n<p>*   <code><mainClass><\/code>: \u00c7al\u0131\u015ft\u0131r\u0131lacak Java s\u0131n\u0131f\u0131n\u0131n tam nitelikli ad\u0131n\u0131 (package dahil) belirtir. Bu zorunlu bir parametredir.<br \/>\n*   <code><arguments><\/code>: <code>mainClass<\/code>&#8216;a ge\u00e7irilecek komut sat\u0131r\u0131 arg\u00fcmanlar\u0131n\u0131 tan\u0131mlar. Her <code><argument><\/code> etiketi ayr\u0131 bir arg\u00fcman\u0131 temsil eder.<br \/>\n*   <code><systemProperties><\/code>: \u00c7al\u0131\u015ft\u0131r\u0131lan JVM&#8217;e ge\u00e7irilecek sistem \u00f6zelliklerini tan\u0131mlar. Her <code><systemProperty><\/code> etiketi bir anahtar-de\u011fer \u00e7ifti i\u00e7erir.<br \/>\n*   <code><classpathScope><\/code>: \u00c7al\u0131\u015ft\u0131r\u0131lan Java program\u0131 i\u00e7in classpath&#8217;a dahil edilecek ba\u011f\u0131ml\u0131l\u0131klar\u0131n kapsam\u0131n\u0131 belirler. Olas\u0131 de\u011ferler: <code>compile<\/code>, <code>runtime<\/code>, <code>test<\/code>. Varsay\u0131lan de\u011fer <code>runtime<\/code>&#8216;d\u0131r, yani hem derleme hem de \u00e7al\u0131\u015fma zaman\u0131 ba\u011f\u0131ml\u0131l\u0131klar\u0131 dahil edilir. <code>test<\/code> olarak ayarlan\u0131rsa, test ba\u011f\u0131ml\u0131l\u0131klar\u0131 da classpath&#8217;a eklenir.<\/p>\n<p>Bu konfig\u00fcrasyonla, uygulaman\u0131z\u0131 a\u015fa\u011f\u0131daki komutla \u00e7al\u0131\u015ft\u0131rabilirsiniz:<\/p>\n<pre><code class=\"language-bash\">mvn exec:java<\/code><\/pre>\n<p>E\u011fer <code>mainClass<\/code>&#8216;\u0131 do\u011frudan komut sat\u0131r\u0131ndan belirtmek isterseniz:<\/p>\n<pre><code class=\"language-bash\">mvn exec:java -Dexec.mainClass=\"com.example.myapp.MyApplication\" -Dexec.args=\"arg1 arg2\" -Dexec.systemProperties=\"my.property=myValue\"<\/code><\/pre>\n<p>Bu, <code>pom.xml<\/code>&#8216;deki konfig\u00fcrasyonu ge\u00e7ersiz k\u0131lar ve dinamik \u00e7al\u0131\u015ft\u0131rmalar i\u00e7in kullan\u0131\u015fl\u0131d\u0131r.<\/p>\n<h4>Harici Komutlar\u0131 veya Scriptleri \u00c7al\u0131\u015ft\u0131rma (<code>exec<\/code> goal&#8217;\u00fc)<\/h4>\n<p><code>exec<\/code> goal&#8217;\u00fc, Maven&#8217;\u0131n d\u0131\u015f\u0131nda herhangi bir program\u0131 veya scripti \u00e7al\u0131\u015ft\u0131rmak i\u00e7in kullan\u0131l\u0131r. Bu, bir shell scripti, bir Python program\u0131, bir veritaban\u0131 istemcisi veya hatta ba\u015fka bir Java uygulamas\u0131n\u0131n kendi ba\u015flat\u0131c\u0131s\u0131 olabilir.<\/p>\n<pre><code class=\"language-xml\"><plugin>\n    <groupId>org.codehaus.mojo<\/groupId>\n    <artifactId>exec-maven-plugin<\/artifactId>\n    <version>3.1.1<\/version>\n    <configuration>\n        <executable>python<\/executable> <!-- \u00c7al\u0131\u015ft\u0131r\u0131lacak program -->\n        <workingDirectory>${project.basedir}\/scripts<\/workingDirectory> <!-- \u00c7al\u0131\u015fma dizini -->\n        <arguments>\n            <argument>myscript.py<\/argument>\n            <argument>--param<\/argument>\n            <argument>value<\/argument>\n        <\/arguments>\n        <environmentVariables>\n            <MY_ENV_VAR>someValue<\/MY_ENV_VAR>\n        <\/environmentVariables>\n        <longArguments>\n            <longArgument>--long-param=longValue<\/longArgument>\n        <\/longArguments>\n    <\/configuration>\n<\/plugin><\/code><\/pre>\n<p>Yukar\u0131daki konfig\u00fcrasyonda:<\/p>\n<p>*   <code><executable><\/code>: \u00c7al\u0131\u015ft\u0131r\u0131lacak program\u0131n veya scriptin ad\u0131n\u0131\/yolunu belirtir. E\u011fer program PATH&#8217;te de\u011filse, tam yolunu belirtmek gerekebilir (\u00f6rn. <code>\/usr\/local\/bin\/python<\/code>).<br \/>\n*   <code><workingDirectory><\/code>: Komutun \u00e7al\u0131\u015ft\u0131r\u0131laca\u011f\u0131 dizini belirtir. Varsay\u0131lan olarak proje k\u00f6k dizinidir (<code>${project.basedir}<\/code>).<br \/>\n*   <code><arguments><\/code>: \u00c7al\u0131\u015ft\u0131r\u0131lan programa ge\u00e7irilecek komut sat\u0131r\u0131 arg\u00fcmanlar\u0131n\u0131 tan\u0131mlar.<br \/>\n*   <code><environmentVariables><\/code>: \u00c7al\u0131\u015ft\u0131r\u0131lan programa \u00f6zel ortam de\u011fi\u015fkenlerini tan\u0131mlar.<br \/>\n*   <code><longArguments><\/code>: Tek bir arg\u00fcman olarak ayr\u0131\u015ft\u0131r\u0131lacak uzun arg\u00fcmanlar\u0131 belirtir (\u00f6rne\u011fin, <code>--param=value<\/code>). Bu, <code><arguments><\/code> ile ayn\u0131 i\u015flevi g\u00f6r\u00fcr ancak baz\u0131 durumlarda daha okunakl\u0131 olabilir.<\/p>\n<p>Bu konfig\u00fcrasyonla, scriptinizi a\u015fa\u011f\u0131daki komutla \u00e7al\u0131\u015ft\u0131rabilirsiniz:<\/p>\n<pre><code class=\"language-bash\">mvn exec:exec<\/code><\/pre>\n<p>Komut sat\u0131r\u0131ndan <code>executable<\/code> ve <code>arguments<\/code> belirtmek i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">mvn exec:exec -Dexec.executable=\"ls\" -Dexec.args=\"-l\"<\/code><\/pre>\n<h4>Ba\u011f\u0131ms\u0131z Bir JAR Dosyas\u0131n\u0131 \u00c7al\u0131\u015ft\u0131rma<\/h4>\n<p>Bazen, Exec Maven Plugin kullanarak \u00f6nceden paketlenmi\u015f bir JAR dosyas\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rmak isteyebilirsiniz. Bu, iki \u015fekilde yap\u0131labilir:<\/p>\n<p>1.  <strong><code>java<\/code> goal&#8217;\u00fc ile (e\u011fer JAR&#8217;\u0131n i\u00e7inde <code>Main-Class<\/code> belirtilmi\u015fse):<\/strong><\/p>\n<p>    Bu y\u00f6ntem, JAR&#8217;\u0131n kendi manifest dosyas\u0131nda <code>Main-Class<\/code> \u00f6zniteli\u011fi tan\u0131mlanm\u0131\u015fsa \u00e7al\u0131\u015f\u0131r. Exec Maven Plugin, bu durumda JAR&#8217;\u0131 classpath&#8217;a ekler ve <code>Main-Class<\/code>&#8216;\u0131 otomatik olarak bulur.<\/p>\n<pre><code class=\"language-xml\"><plugin>\n        <groupId>org.codehaus.mojo<\/groupId>\n        <artifactId>exec-maven-plugin<\/artifactId>\n        <version>3.1.1<\/version>\n        <configuration>\n            <classpathScope>compile<\/classpathScope>\n            <mainClass>com.example.myjar.MainClass<\/mainClass> <!-- E\u011fer jar i\u00e7inde Main-Class belirtilmemi\u015fse -->\n            <additionalClasspathElements>\n                <additionalClasspathElement>${project.build.directory}\/my-app.jar<\/additionalClasspathElement>\n            <\/additionalClasspathElements>\n        <\/configuration>\n    <\/plugin><\/code><\/pre>\n<p>    Ancak bu y\u00f6ntem genellikle <code>mainClass<\/code>&#8216;\u0131 do\u011frudan sizin projenizin bir s\u0131n\u0131f\u0131 olarak belirtmek i\u00e7in kullan\u0131l\u0131r. E\u011fer bir JAR&#8217;\u0131 \u00e7al\u0131\u015ft\u0131rmak istiyorsan\u0131z ve JAR&#8217;\u0131n i\u00e7indeki <code>Main-Class<\/code>&#8216;\u0131 kullanmak istiyorsan\u0131z, genellikle <code>exec<\/code> goal&#8217;\u00fc ile <code>java -jar<\/code> komutunu taklit etmek daha yayg\u0131nd\u0131r.<\/p>\n<p>2.  <strong><code>exec<\/code> goal&#8217;\u00fc ile (<code>java -jar<\/code> komutunu taklit ederek):<\/strong><\/p>\n<p>    Bu, en esnek yoldur ve JAR&#8217;\u0131n kendi <code>Main-Class<\/code>&#8216;\u0131n\u0131 kullanmas\u0131n\u0131 sa\u011flar.<\/p>\n<pre><code class=\"language-xml\"><plugin>\n        <groupId>org.codehaus.mojo<\/groupId>\n        <artifactId>exec-maven-plugin<\/artifactId>\n        <version>3.1.1<\/version>\n        <configuration>\n            <executable>java<\/executable>\n            <arguments>\n                <argument>-jar<\/argument>\n                <argument>${project.build.directory}\/${project.build.finalName}.jar<\/argument>\n                <argument>arg1<\/argument>\n                <argument>arg2<\/argument>\n            <\/arguments>\n        <\/configuration>\n    <\/plugin><\/code><\/pre>\n<p>    Burada, <code>executable<\/code> olarak <code>java<\/code> komutunu, <code>arguments<\/code> olarak da <code>-jar<\/code> ve \u00e7al\u0131\u015ft\u0131r\u0131lacak JAR dosyas\u0131n\u0131n yolunu belirtiyoruz. <code>${project.build.directory}\/${project.build.finalName}.jar<\/code> ifadesi, Maven&#8217;\u0131n paketledi\u011fi JAR dosyas\u0131n\u0131n yolunu dinamik olarak elde etmek i\u00e7in kullan\u0131l\u0131r.<\/p>\n<h4>Maven Ya\u015fam D\u00f6ng\u00fcs\u00fcne Ba\u011flama<\/h4>\n<p>Exec Maven Plugin&#8217;i bir Maven ya\u015fam d\u00f6ng\u00fcs\u00fc faz\u0131na ba\u011flamak, belirli bir a\u015famada otomatik olarak \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flar. Bu, \u00f6zellikle entegrasyon testleri, da\u011f\u0131t\u0131m \u00f6ncesi ad\u0131mlar veya \u00f6zel do\u011frulama kontrolleri i\u00e7in kullan\u0131\u015fl\u0131d\u0131r. Bu ba\u011flama i\u015flemi <code><executions><\/code> etiketi alt\u0131nda yap\u0131l\u0131r.<\/p>\n<pre><code class=\"language-xml\"><plugin>\n    <groupId>org.codehaus.mojo<\/groupId>\n    <artifactId>exec-maven-plugin<\/artifactId>\n    <version>3.1.1<\/version>\n    <executions>\n        <execution>\n            <id>run-integration-tests-setup<\/id> <!-- Bu execution i\u00e7in benzersiz bir ID -->\n            <phase>pre-integration-test<\/phase> <!-- Hangi fazda \u00e7al\u0131\u015ft\u0131r\u0131lacak -->\n            <goals>\n                <goal>java<\/goal> <!-- Hangi goal \u00e7al\u0131\u015ft\u0131r\u0131lacak -->\n            <\/goals>\n            <configuration>\n                <mainClass>com.example.test.TestSetup<\/mainClass>\n                <arguments>\n                    <argument>setup<\/argument>\n                <\/arguments>\n            <\/configuration>\n        <\/execution>\n        <execution>\n            <id>run-post-build-script<\/id>\n            <phase>package<\/phase>\n            <goals>\n                <goal>exec<\/goal>\n            <\/goals>\n            <configuration>\n                <executable>sh<\/executable>\n                <arguments>\n                    <argument>.\/scripts\/post-build.sh<\/argument>\n                    <argument>${project.version}<\/argument>\n                <\/arguments>\n            <\/configuration>\n        <\/execution>\n    <\/executions>\n<\/plugin><\/code><\/pre>\n<p>Yukar\u0131daki \u00f6rnekte iki farkl\u0131 execution tan\u0131mlanm\u0131\u015ft\u0131r:<\/p>\n<p>*   Birincisi, <code>pre-integration-test<\/code> faz\u0131nda <code>com.example.test.TestSetup<\/code> s\u0131n\u0131f\u0131n\u0131 \u00e7al\u0131\u015ft\u0131r\u0131r. Bu, entegrasyon testleri ba\u015flamadan \u00f6nce gerekli ortam\u0131 haz\u0131rlamak i\u00e7in kullan\u0131labilir.<br \/>\n*   \u0130kincisi, <code>package<\/code> faz\u0131ndan sonra <code>.\/scripts\/post-build.sh<\/code> scriptini \u00e7al\u0131\u015ft\u0131r\u0131r ve projenin versiyonunu arg\u00fcman olarak ge\u00e7irir. Bu, paketleme sonras\u0131 \u00f6zel i\u015flemler (\u00f6rne\u011fin, da\u011f\u0131t\u0131m i\u00e7in ek dosyalar haz\u0131rlama) i\u00e7in kullan\u0131labilir.<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Exec Maven Plugin: Maven Build S\u00fcrecinde Java Programlar\u0131n\u0131 \u00c7al\u0131\u015ft\u0131rma Rehberi\nMaven, Java projeleri i\u00e7in end\u00fcstri standard\u0131 bir build otom","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1408],"tags":[],"class_list":{"0":"post-31176","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-java","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Exec Maven Plugin: Maven Build S\u00fcrecinde Java Programlar\u0131n\u0131 \u00c7al\u0131\u015ft\u0131rma Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/exec-maven-plugin-maven-build-surecinde-java-programlarini-calistirma-rehberi\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Exec Maven Plugin: Maven Build S\u00fcrecinde Java Programlar\u0131n\u0131 \u00c7al\u0131\u015ft\u0131rma Rehberi\" \/>\n<meta property=\"og:description\" content=\"Exec Maven Plugin: Maven Build S\u00fcrecinde Java Programlar\u0131n\u0131 \u00c7al\u0131\u015ft\u0131rma Rehberi Maven, Java projeleri i\u00e7in end\u00fcstri standard\u0131 bir build otom\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/exec-maven-plugin-maven-build-surecinde-java-programlarini-calistirma-rehberi\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-06T18:41:31+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/exec-maven-plugin-maven-build-surecinde-java-programlarini-calistirma-rehberi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/exec-maven-plugin-maven-build-surecinde-java-programlarini-calistirma-rehberi\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Exec Maven Plugin: Maven Build S\u00fcrecinde Java Programlar\u0131n\u0131 \u00c7al\u0131\u015ft\u0131rma Rehberi\",\"datePublished\":\"2025-10-06T18:41:31+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/exec-maven-plugin-maven-build-surecinde-java-programlarini-calistirma-rehberi\/\"},\"wordCount\":1471,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Java\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/exec-maven-plugin-maven-build-surecinde-java-programlarini-calistirma-rehberi\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/exec-maven-plugin-maven-build-surecinde-java-programlarini-calistirma-rehberi\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/exec-maven-plugin-maven-build-surecinde-java-programlarini-calistirma-rehberi\/\",\"name\":\"Exec Maven Plugin: Maven Build S\u00fcrecinde Java Programlar\u0131n\u0131 \u00c7al\u0131\u015ft\u0131rma Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-10-06T18:41:31+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/exec-maven-plugin-maven-build-surecinde-java-programlarini-calistirma-rehberi\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/exec-maven-plugin-maven-build-surecinde-java-programlarini-calistirma-rehberi\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/exec-maven-plugin-maven-build-surecinde-java-programlarini-calistirma-rehberi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Exec Maven Plugin: Maven Build S\u00fcrecinde Java Programlar\u0131n\u0131 \u00c7al\u0131\u015ft\u0131rma Rehberi\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Exec Maven Plugin: Maven Build S\u00fcrecinde Java Programlar\u0131n\u0131 \u00c7al\u0131\u015ft\u0131rma Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/exec-maven-plugin-maven-build-surecinde-java-programlarini-calistirma-rehberi\/","og_locale":"tr_TR","og_type":"article","og_title":"Exec Maven Plugin: Maven Build S\u00fcrecinde Java Programlar\u0131n\u0131 \u00c7al\u0131\u015ft\u0131rma Rehberi","og_description":"Exec Maven Plugin: Maven Build S\u00fcrecinde Java Programlar\u0131n\u0131 \u00c7al\u0131\u015ft\u0131rma Rehberi Maven, Java projeleri i\u00e7in end\u00fcstri standard\u0131 bir build otom","og_url":"https:\/\/fatihsoysal.com\/blog\/exec-maven-plugin-maven-build-surecinde-java-programlarini-calistirma-rehberi\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-10-06T18:41:31+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"8 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/exec-maven-plugin-maven-build-surecinde-java-programlarini-calistirma-rehberi\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/exec-maven-plugin-maven-build-surecinde-java-programlarini-calistirma-rehberi\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Exec Maven Plugin: Maven Build S\u00fcrecinde Java Programlar\u0131n\u0131 \u00c7al\u0131\u015ft\u0131rma Rehberi","datePublished":"2025-10-06T18:41:31+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/exec-maven-plugin-maven-build-surecinde-java-programlarini-calistirma-rehberi\/"},"wordCount":1471,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Java"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/exec-maven-plugin-maven-build-surecinde-java-programlarini-calistirma-rehberi\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/exec-maven-plugin-maven-build-surecinde-java-programlarini-calistirma-rehberi\/","url":"https:\/\/fatihsoysal.com\/blog\/exec-maven-plugin-maven-build-surecinde-java-programlarini-calistirma-rehberi\/","name":"Exec Maven Plugin: Maven Build S\u00fcrecinde Java Programlar\u0131n\u0131 \u00c7al\u0131\u015ft\u0131rma Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-10-06T18:41:31+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/exec-maven-plugin-maven-build-surecinde-java-programlarini-calistirma-rehberi\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/exec-maven-plugin-maven-build-surecinde-java-programlarini-calistirma-rehberi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/exec-maven-plugin-maven-build-surecinde-java-programlarini-calistirma-rehberi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Exec Maven Plugin: Maven Build S\u00fcrecinde Java Programlar\u0131n\u0131 \u00c7al\u0131\u015ft\u0131rma Rehberi"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/31176","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=31176"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/31176\/revisions"}],"predecessor-version":[{"id":31177,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/31176\/revisions\/31177"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=31176"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=31176"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=31176"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}