12 Aralık 2021 Pazar

exec plugin - Bir Uygulamayı Çalıştırır

Giriş
Maven ile build işleminin yaparken başka bir uygulamayı da çalıştırma ihtiyacı doğabilir.

1. Goaller
Tek bir goal var. O da exec
exec goal belirtilen uygulamayı iki şekilde çalıştırabilir. 
1. Ayrı bir process içinde
2. Aynı JVM içinde
Açıklaması şöyle.
exec:exec execute programs and Java programs in a separate process.
exec:java execute Java programs in the same VM.
Nasıl çalıştırılacağı bu plugin'e geçilen parametre ile belirtilebilir.

2. Alanlar
executable Alanı
Örnek - Angular build
Şöyle yaparız. Burada proje derlenmeden önce validate safhası belirtildiği için önce Angular projesi ng komutu ile derleniyor.
<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>exec-maven-plugin</artifactId>
  <version>1.6.0</version>
  <executions>
    <execution>
<phase>validate</phase>
<goals>
  <goal>exec</goal>
</goals>
    </execution>
  </executions>
  <configuration>
    <executable>ng</executable>
    <workingDirectory>src/main/resources/AngularApplication</workingDirectory>
    <arguments>build</arguments>
  </configuration>
</plugin>
Örnek
Şöyle yaparız
<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>exec-maven-plugin</artifactId>
  <version>3.1.0</version>
  <configuration>
    <executable>grype</executable>
      <arguments>
      <argument>docker:mydeveloperplanet/mygrypeplanet:${project.version}</argument>
      <argument>--scope</argument>
      <argument>all-layers</argument>
      <argument>--fail-on</argument>
      <argument>high</argument>
      <argument>--only-fixed</argument>
      <argument>-q</argument>
    </arguments>
  </configuration>
</plugin>
Çalıştırmak için şöyle yaparız
$ mvnd exec:exec
mainClass Alanı
Şöyle yaparız. Dolaysıyla mvn exec:java şeklinde çalıştırılabilir
<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>exec-maven-plugin</artifactId>
  <version>${exec-maven-plugin.version}</version>
  <configuration>
    <mainClass>com.example.demo.DemoApplication</mainClass>
  </configuration>
</plugin>
phase Alanı
Örnek
generate-test-sources safhasında çalışması için şöyle yaparız.
<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>exec-maven-plugin</artifactId>
  <version>1.5.0</version>
  <executions>
    <execution>
      <id>build-test-environment</id>
      <phase>generate-test-sources</phase>  <!-- generating source code -->
      <!-- rest of config -->
    </execution>
  </executions>
      <!-- rest of config, consider moving into specific execution -->
</plugin>
3. Komut Satırından Çalıştırma
1. Separate Process - exec:exec
Örnek
Şöyle yaparız.
mvn exec:exec -Dexec.mainClass="org.main.Class" -Dspring.profiles.active=test
2. The Same VM - exec:java
"java -jar ..." ile derleme sonucunu çalıştırmak gibidir. Yani bir  anlamda "gradle run" ile aynıdır. Eğer uygulama fat jar değilse 
1. plugin içinde <mainClass> ile çalıştırılacak sınıf belirtilir veya
2. -Dfoo şeklinde main class belirtilir

Örnek - fat jar
Şöyle yaparız.
mvn -q compile exec:java
Örnek  - fat jar
Şöyle yaparız. Uygulama aynı JVM içinde çalışır
mvn clean compile exec:java
//or
mvn clean package
java -jar target\xxx-fat.jar
Örnek
Şöyle yaparız. Burada fat jar yok, mainClass'ı belirtmek gerekiyor.
mvn -Dexec.mainClass=org.example.JetJob exec:java


Hiç yorum yok:

Yorum Gönder

Local Snapshot Kullanmak

Örnek Şöyle yaparız <repository> <id>snapshot-repository</id> <name>Maven2 Snapshot Repository</name> &l...