31 Temmuz 2023 Pazartesi

25 Temmuz 2023 Salı

mvn komutu -pl seçeneği - Project List

Giriş
Multi-module projelerde kullanılır. "project list" anlamına gelir. Tüm projeleri değil sadece ismi belirtilen projeyi derler. Açıklaması şöyle.
-pl,--projects <arg> >> Comma-delimited list of specified reactor projects to build
  instead of all projects. A project can be specified by [groupId]:artifactId or by its
  relative path.
Örnek
Şöyle yaparız.
mvn package -pl sub_module
Örnek
Şöyle yaparız. Burada module ismi gateway ve spring-boot plugin'i tetikleniyor. 
mvn -pl gateway spring-boot:run 
-DskipTests
-Dspring-boot.run.arguments= — EUREKA_SERVER_ADDRESS=http://localhost:8761/eureka
Örnek - exlude
Şöyle yaparız. Burada - veya ! karakteri ile bazı modüllerin hariç bırakılması sağlanıyor
mvn install -DskipTests -pl -distribution,-extensions/hadoop-dist -f pom.xml

-amd ile Birlikte Kullanımı - also-make-dependents
Açıklaması şöyle
The -amd option stands for "also-make-dependents" and is used along with -pl to ensure that not only the specified modules are built but also the projects that depend on them.
Örnek
Bu modüle bağımlı olan diğerlerini de derlemek için şöyle yaparız.
mvn clean package -pl sub_module -amd
-am ile Birlikte Kullanımı - also-make
Açıklaması şöyle
The -am option stands for "also-make" and is used along with -pl to ensure that not only the specified modules are built but also their dependencies.
Örnek
Belirtilen modülün kullandığı diğer modülleri de derlemek istersek şöyle yaparız.
mvn clean package -pl sub_module -am

18 Temmuz 2023 Salı

dockerfile plugin

Giriş
Açıklaması şöyle
Spotify Dev team open-sourced many tools they are using among others dockerfile-maven-plugin as well.

The dockerfile-maven-plugin can create and publish a docker image based on your Dockerfile meanwhile running maven commands.

It allows you to configure the props based on your need. The usage doc can be found here. Authentication doc for publishing your app’s image to Google Cloud Container or your registry can be found here.
Örnek
Şöyle yaparız
<plugin>
  <groupId>com.spotify</groupId>
  <artifactId>dockerfile-maven-plugin</artifactId>
  <version>${dockerfile-maven-plugin.version}</version>
  <configuration>
    <repository>${docker.image.prefix}/${project.artifactId}</repository>
  </configuration>
  <executions>
    <execution>
      <id>default</id>
      <phase>install</phase>
      <goals>
        <goal>build</goal>
      </goals>
    </execution>
  </executions>
</plugin>
Docker dosyası için şöyle yaparız.  maven install komutu ile önce jar yapılandırılıyor. En son olarak ta Docker dosyası çalıştırılıyor
FROM openjdk:17-alpine as builder

WORKDIR application

ARG JAR_FILE=target/*.jar

COPY ${JAR_FILE} application.jar
RUN java -Djarmode=layertools -jar application.jar extract

FROM openjdk:17-alpine
WORKDIR application
COPY --from=builder application/dependencies/ ./
COPY --from=builder application/spring-boot-loader/ ./
COPY --from=builder application/snapshot-dependencies/ ./
COPY --from=builder application/application/ ./
ENTRYPOINT ["java", "org.springframework.boot.loader.JarLauncher"]
mvn deploy ile de Docker image Docker deposuna gönderilir

17 Temmuz 2023 Pazartesi

shade plugin - relocation Kullanımı

Giriş
Bazen bir kütüphane ile gelen 3. taraf bağımlılıklar ile kendi projem arasında uyumsuzluk olur.  

1. relocation Alanı
relocation ve shadedPattern genelde birlikte kullanılır

Örnek
Şöyle yaparız. Burada org.apache.calcite kodları başka bir dizinine toplanır
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-shade-plugin</artifactId>
  <configuration>
    <shadedArtifactAttached>false</shadedArtifactAttached>
    <relocations>
      <relocation>
        <pattern>org.apache.calcite</pattern>
        <shadedPattern>${relocation.root}.org.apache.calcite</shadedPattern>
      </relocation>
    </relocations>
  </configuration>
</plugin>
Örnek
Şöyle yaparız
- Burada joda-time ve com.amazonaws kütüphanelerini dahil eden bir fat jar üretiliyor. 
- Ayrıca org.joda paketleri com.amazonaws.thirdparty.joda altına taşınıyor.
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-shade-plugin</artifactId>
  <version>2.4.3</version>
  <configuration>
    <artifactSet>
      <includes>
        <include>joda-time:joda-time</include>
        <include>com.amazonaws:*</include>
      </includes>
    </artifactSet>
    <relocations>
      <relocation>
        <pattern>org.joda</pattern>
        <shadedPattern>com.amazonaws.thirdparty.joda</shadedPattern>
      </relocation>
    </relocations>
  </configuration>
</plugin>
Örnek
Şöyle yaparız
<plugin>
  <artifactId>maven-shade-plugin</artifactId>
  <configuration>

    <!-- Cancel the relocation of jackson-core defined in parent pom.
    <relocations combine.self="override">
    </relocations>
  </configuration>
</plugin>
veya şöyle yaparız
<plugin>
  <artifactId>maven-shade-plugin</artifactId>
  <configuration>

    <!-- Cancel the relocation of jackson-core defined in hazelcast-parent pom.
    <relocations combine.self="override">
      <relocation>
        <pattern>com.fasterxml.jackson.core</pattern>
        <shadedPattern>com.fasterxml.jackson.core</shadedPattern>
      </relocation>
    </relocations>
  </configuration>
</plugin>
2. Sadece shadedPattern Alanı
Açıklaması şöyle. Kendi kodlarım ve dependency olarak gelen kütüphaneler shade isimli bir dizine toplanır. İstenirse bu dizine yeni bir isim verilebilir
The "shadedPattern" is a configuration option in the Maven Shade Plugin that specifies the pattern for renaming the classes and resources in the shaded JAR file.

When you use the Maven Shade Plugin to create a shaded JAR, it merges all the dependencies of your project into a single JAR file. During the shading process, the plugin renames the classes and resources from the original JAR files to avoid conflicts with other libraries in the classpath.

The shadedPattern option allows you to specify the pattern for the renamed classes and resources in the shaded JAR. By default, the pattern is "shade/[class]", which means that all classes and resources will be moved to a "shade" directory in the JAR file.

You can customize the shadedPattern option to change the directory structure or add prefixes or suffixes to the renamed classes and resources. For example, you could use the pattern "myapp/[artifactId]-[version]/[class]" to create a directory structure that includes the name and version of your project.
Örnek
Şöyle yaparız. Burada kendi kodlarım da dahil olmak üzere her şey myapp/my-app-1.0.0/ dizinine toplanır
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-shade-plugin</artifactId>
  <version>3.2.4</version>
  <configuration>
    <shadedPattern>myapp/[artifactId]-[version]/[class]</shadedPattern>
  </configuration>
  <executions>
    <execution>
      <phase>package</phase>
      <goals>
        <goal>shade</goal>
      </goals>
    </execution>
  </executions>
</plugin>

Local Snapshot Kullanmak

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