7 Mayıs 2018 Pazartesi

maven pom.xml

maven layout
maven projenin kodlarının kendi belirlediği şekilde olmasını ister. Yapı şuna benzer.
/src/main/java/
/src/main/resources/
/src/test/java/
/src/test/resources/
Kaynak kodlar java/src/main dizini altında olmalı. Eski projelerde - ant tabanlı olanlarda - bu böyle değildi. Maven düzenine geçmekte fayda var.

resources dizinindeki her şey jar'ın kök dizininden başlayacak şekilde paketlenir. Dolayısıyla direkt resources altına bir dosya koymak yerine resources altına da bir dizin ağacı açmak gerekiyor.

Tag'ler
Maven plugin'leri dışında kendi ayarları için bazı tag'ler sunuyor. Bunlar şöyle.

Kendi Artifact Alanım
Şöyle yaparız.
<groupId>com.niewlabs</groupId>
<artifactId>highlighter</artifactId>
<version>1.0-SNAPSHOT</version>
Paketleme için şöyle yaparız
<packaging>jar</packaging>
Tomcat'e deploy edeceksek paketleme için şöyle yaparız
<packaging>war</packaging>

build tag'i
Buraya genellikle plugin'ler yazılır
Örnek - filter resource files
Şöyle yaparız. Build zamanında verilen değerleri kullanabilmeyi sağlar.
<build>
  <resources>
    <resource>
      <directory>src/main/resources</directory>
      <filtering>true</filtering>
    </resource>
  </resources>
</build>

Örnek
Şöyle yaparız.
<build>
  <sourceDirectory>${basedir}/src</sourceDirectory>
  <resources>
    <resource>
      <directory>${basedir}/src</directory>
      <excludes>
        <exclude>**/*.java</exclude>
      </excludes>
    </resource>
  </resources>
</build>
Örnek
Eğer farklı bir isim vermek istersek  şöyle yaparız
<finalName>${project.artifactId}</finalName>
properties tag'i

Örnek
Projenin ana sınıfının ne olduğunu belirtir. Şöyle yaparız.
<properties>        
  <start-class>mypackage.App</start-class>
</properties>
Örnek
Compiler sürümünü belirtmek için şöyle yaparız.
<properties>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  <maven.compiler.target>1.8</maven.compiler.target>
  <maven.compier.source>1.8</maven.compiler.source>
</properties>
Örnek
Java sürümünü belirtmek için şöyle yaparız.
<properties>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  <java.version>1.8</java.version>
  <start-class>com.example.Application</start-class>
</properties>
dependencies tag'i
maven pom.xml dependencies tag yazısına taşıdım.

dependencyManagement tag'i
Ana proje (A) ve bunun B,C,D alt projeleri olsun. C ve D projelerinde alpa.jar ve beta.jar'a ihtiyaç olsun.

A projesinde dependencyManagement altında alpha.jar ve beta.jar'ı tanımlarım.
C ve D projeleri dependency olarak bu bağımlılığı belirtir ve jar'ları kullanabilirler.

B projesi ise bu bağımlılığı dependency olarak belirrmediği için beta.jarkullanmaz.

Eğer A projesinde jar'ları dependencyManagement yerine dependency olarak belirtseydim, B projesi de otomatik olarak bu beta.jar'ı bağımlılıkları arasında kabul edecekti. Açıklaması şöyle
Artifacts specified in the <dependencyManagement> section, will only be included in the child module if they were also specified in the <dependencies> section of the child module itself. Why is it good you ask? because you specify the version and/or scope in the parent, and you can leave them out when specifying the dependencies in the child POM. This can help you use unified versions for dependencies for child modules, without specifying the version in each child module
Örnek
Önce A ve diğer projeler arasında parent ilişkisi tanılanır. Şöyle yaparız.
<project ...>

  <groupId>com.foo.bar</groupId>
  <artifactId>parent</artifactId>
  <packaging>pom</packaging>
  <version>2.3.0</version>

  <modules>
    <module>A</module>
    <module>B</module>
    </modules>

  <dependencyManagement>
    ...
  </dependencyManagement>
</project>
Alt projelerde şöyle yaparız.
<project ...>
  <modelVersion>4.0.0</modelVersion>
  <artifactId>A</artifactId>
  <version>4.0</version>

  <parent>
    <groupId>com.foo.bar</groupId>
    <artifactId>parent</artifactId>
    <version>2.3.0</version>
  </parent>

  <dependencies>
    ...
  </dependencies>
</project>
Daha sonra A projesinde şöyle yaparız. Yani ortak tüm jar'ları belirtiriz.
<!-- Parent pom -->
<project>
  <dependencyManagement>
    <dependencies>
      <dependency> <!-- alpha -->
        ...
      </dependency>
      <dependency>
        ...
      </dependency>
      <dependency> <!-- beta -->
        ...
      </dependency>
    </dependencies>
  </dependencyManagement>
</project>
B projesinde şöyle yaparız. beta.jar'a bağımlılık belirtilmez. Böylece üst pom'dan bu bağımlılık gelmez. Bağımlılıkların sürümünün belirtilmediğine dikkat!
<!-- Child pom -->
<project>
  <dependencies>
    <dependency>
      <groupId>alpha</groupId>
      <artifactId>alpha</artifactId>
    </dependency>
  </dependencies>
</project>
module tag'i
maven pom.xml modules tag yazısına taşıdım.

repositories tag'i
maven pom.xml repositories tag yazısına taşıdım.

scm tag'i
Şöyle yaparız.
<scm>
  <connection>scm:svn:http://myserver/myprohect/trunk/</connection>
  ...
</scm>

Hiç yorum yok:

Yorum Gönder