• Cum. May 20th, 2022

Maven Yazıları 3 – Maven Tabanlı Java Web Projesi Oluşturalım Ve Çalıştıralım

Merhabalar arkadaşlar. Bu yazıda Maven tabanlı bir Java web projesi için uğraşacağız. Yapacaklarımız şu şekilde:

  • Komut satırı üzerinden Maven tabanlı bir Java Web projesi oluşturacağız.
  • Compiler Plugin edineceğiz.
  • war dosyası çıkartacağız.
  • Maven Plug’ini olan Jetty ile projemizi çalıştıracağız.

Projeyi Oluşturalım

Maven giriş yazısında sizlere ArtifactId, GroupId gibi konulardan bahsetmiştim. Şimdi onları da kullanarak şu komut vasıtası ile bir adet Plain Old Web Application (POWA) oluşturalım:

mvn archetype:generate -DarchetypeArtifactId=maven-archetype-
webapp -DartifactId=WebAppProject -DgroupId=com.ilkaygunel
-Dversion=1.0-SNAPSHOT -Dpackage=com.ilkaygunel

Komut içerisinde

  • archetype:generate ifadesi ile bir proje generate edileceğini söylüyoruz.
  • -DarchetypeArtifactId=maven-archetype-webapp ifadesi ile bir webapp projesinin oluşturulmasını istediğimizi söylüyoruz. -DarchetypeArtifactId özelliğine atanan değer projenin türünü belirler. Burada projemizin türü web projesi.
  • -DartifactId projenin ArtifactId’sini, -DgroupId GroupId’sini, -Dpackage da paket ismi bilgisini belirleri. -Dversion da projenin versiyonunu.

Komut verildiği zaman terminalde şu şekilde bir akış gerçekleşecek:

Önce gidip Maven’ın repository’isinden webapp oluşturmak için gerekli jar’ları indirecek sonra Confirm properties configuration: sorusu ile bizden az önce komut satırında girdiğimiz ArtifactId vs. bilgilerini doğrulamamızı istiyor.

Proje klasörüne gidip baktığımızda da durum şu şekilde:

Maven tabanlı Java Web projelerinde src/main klasörünün altında bir webapp klasörü bulunur. Projenin deployment descriptor’ı olan web.xml’in yer aldığı WEB-INF klasörü ve web sayfaları yer alır. JSP sayfaları, XHTML sayfaları gibi.

Projenin klasör yapısı içindeki pom.xml dosyasını herhangi bir text editör’de açarsanız şu şekilde bir görünüm ile karşılacaksınız:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.ilkaygunel</groupId>
  <artifactId>WebAppProject</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>WebAppProject Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
  <build>
    <finalName>WebAppProject</finalName>
  </build>
</project>

Komut satırında girdiğimiz bilgiler buraya girilmiş gördüğünüz gibi. Proje generate edildiği için maven test kütüphanesi olan JUnit’i de eklemiş projeye.

Projeyi çalıştırmadan önce yapmamız gereken bir diğer konu ise bir compiler plugin’i eklemek olacaktır. Elimizdeki JSP dosyalarının derlenebilmesi için bu tarz bir plugin’e ihtiyacımız olacak. Bu plug’ini edinmek için de yapmamız gereken şey çok basit. pom.xml dosyasındaki buid tag’lerinin arasına maven-compiler-plugin‘i eklemek. Onu da şu şekilde yapıyoruz:

<build>
    <finalName>WebAppProject</finalName>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.6.1</version>
            <configuration>
            <source>1.8</source>
            <target>1.8</target>
        </configuration>
        </plugin>
    </plugins>
</build>

pom.xml dosyamıza yaptığımız bu güncelleme ile Java 1.8’i kullanacak şekilde maven-compiler-plugin’imizi eklemiş olduk.

Projeyi çalıştırmadan önce yapılması gereken son işlem de war dosyasını edinmek olacaktır. pom.xml dosyasına baktığımızda packaging tag’inde war değerinin olduğunu görüyoruz. Açılımı Web Application Archive olan war dosyasını Java Web projelerinin çıktılanmış hali olarak düşünebiliriz. Tüm web sayfları, sınıflar, kütüphaneler derlenip bu dosya içerisine koyulur ve sunucu tarafından çalıştırabilir hale getirilir. Önce yazılardan hatırlarsanız bir target klasöründen bahsetmiştim. İşte proje derlenip işlem tamamlandığında bu war dosyası target klasörünün altında yer alır.

Şimdi komut satırından proje klasörüne girip mvn install komutunu verelim.

Üstteki ekran görüntüsünde Building war: ile başlayan ilk satıra dikkat ettiğimizde target klasörünün altında WebAppProject.war adında dosyanın oluşturulmuş olduğunu görüyoruz.

Projenin klasörüne gidip baktığımızda da durum şöyle:

WebAppProject.war dosyamız yerini almış.

Projeyi Çalıştıralım

Şimdi artık projenin çalıştırlması aşamasına geldik. Projeyi çalıştırmak için yapmamız gereken şey az önceki maven-compiler-plugin eklemesi gibi maven-jetty-plugin’i eklemek olacaktır. pom.xml’deki build tag’inin yeni hali şöyle olacak:

...
<build>
    <finalName>WebAppProject</finalName>
    <plugins>
       <plugin>
         <artifactId>maven-compiler-plugin</artifactId>
         <version>3.6.1</version>
         <configuration>
         <source>1.8</source>
         <target>1.8</target>
       </configuration>
       </plugin>
       <plugin>
		  <groupId>org.eclipse.jetty</groupId>
		  <artifactId>jetty-maven-plugin</artifactId>
		  <version>9.4.6.v20170531</version>
		</plugin>
     </plugins>
  </build>
  ...

maven-jetty-plugin ile biz proje içerisinde taşınabilecek bir web sunucusu elde etmiş oluyoruz. Projemiz bu sunucu üzerinde çalışacak.

Proje klasöründeki index.jsp dosyasını herhangi bir text editör ile açıp baktığımızda çok basit bir Hello World kodu ile karşılacağız, projeyi çalıştırınca ekranda Hello World görmeyi bekliyoruz:

<html>
    <body>
        <h2>Hello World!</h2>
    </body>
</html>

Şimdi komut satırından proje klasörü içerisinde iken mvn jetty:run komutunu verelim. Eğer bu komutu verdikten sonra No plugin found for prefix ‘jetty’ in the current project and in the plugin groups şeklinde bir hata alırsanız ${user.home}/.m2/settings.xml dosyanızı açın içerisine

<pluginGroup>org.mortbay.jetty</pluginGroup>

satırını ekleyin. Dosya eğer yoks ise içeriği şu şekilde olacak şekilde oluşturabilirsiniz:

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                      http://maven.apache.org/xsd/settings-1.0.0.xsd">
  <localRepository>${user.home}/.m2/repository</localRepository>
  <interactiveMode>true</interactiveMode>
  <usePluginRegistry>false</usePluginRegistry>
  <offline>false</offline>
  <pluginGroups>
    <pluginGroup>org.mortbay.jetty</pluginGroup>
  </pluginGroups>
</settings>

Bu işlemi yaptıktan sonra mvn jetty:run komutunu tekrar verin ve konsolda Started Jetty Server yazısını görene kadar bekleyin. Maven Jetty için jar’ları indirecek ve sunucuyu başlatacak.

Ardından tarayıcınız üzerinden http://localhost:8080/index.jsp adresine gidin ve işte Hello World karşımızda 😎

Burada projenin direk localhost:8080 üzerinden değil de localhost:8080/WebAppProject üzerinde çalışmasını istersek de plugin’i şu şekilde konfigüre edebiliriz:

<plugin>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-maven-plugin</artifactId>
    <version>9.4.6.v20170531</version>
    <configuration>
        <scanIntervalSeconds>10</scanIntervalSeconds>
        <webApp>
            <contextPath>/WebAppProject</contextPath>
        </webApp>
    </configuration>
</plugin>

webApp tag’lerinin contextPath tag’leri ile projenin Jetty üzerinde hangi path’de çalışacağını söylemiş oluyoruz. İstediğimiz path’i buraya verebiliriz. Örneğin projenin Test path’i üzerinde çalışmasını istersek

<contextPath>/Test</contextPath>

şeklinde bir değişiklik yeterli olur. Terminal üzerinden kontrol+z ile stop işlemi yapıp tekrar mvn jetty:run dediğimde proje WebAppProject path’i üzerinde çalışıyor durumda.

Bu yazıda anlatacaklarım da bu kadar arkadaşlar. Gelecek yazılarda Eclipse ve NetBeans IDE’leri üzerinde Maven projeleri ile işlemler yapacağız.

Görüşene kadar sağlıcakla kalın.

Selam ve Sevgilerimle

Merhaba! Ben İlkay Günel :) İstanbul Üniversitesi Bilgisayar Mühendisliği 2016 mezunuyum. Güncel olarak Paycore'da SoftPOS projesinde Java Developer olarak çalışmaktayım. Büyük oranda Java teknolojileri ile uğraşıp kendimi geliştirmeye çalışıyorum ve bu mecrada öğrendiklerimi sizle paylaşmaya da çabalıyorum :) Hakkımda biraz daha detaylı bilgi için: http://www.ilkaygunel.com/about/

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir