Java Package ve Module İşlemleri ve Komutları

Java Package ve Module İşlemleri ve Komutları

Arkadaşlar merhaba,

Bu yazıda java paket import işlemlerine bakacağız.

Java api'sinde bulunan binlerce sınıfı ayırt etmek ve gruplamak için paket yapısını kullanılır.

package Chapter1;

import java.util.Date;
import java.util.Random;
import java.sql.*;


public class İmportExample {

    Date date;
    java.sql.Date sqlDate; // yada

    java.util.Date date1;
    java.sql.Date sqlDate1;  // gibi

    public static void main(String[] args) {
        Random r = new Random();
        System.out.println(r.nextInt(10));
    }
}

Java dünyasında özel bir paket vardır. java.lang paketi Bu paket, otomatik olarak içe aktarıldığı için özeldir.Ekstra olarak eklenmesi gereksizdir.

import java.lang.System;
import java.lang.*;

// otomatik olarak ekleneceklerdir.

Aynı paketteki sınıflar genellikle birlikte alınır. Bir paketteki tüm sınıfları içe aktarmak için bir kısayol kullanabilirsiniz.Bu şekilde java.util paketi altında ki tüm sınıfları import edebiliriz.

import java.util.*;
import java.util.Date;
import java.sql.*;

// bu şekilde çalışacaktır.

Bir sınıf adını açıkça içe aktarırsanız, mevcut tüm joker karakterlere göre öncelikli olur. Java, "Programcı gerçekten java.util.Date sınıfını kullanmamı istiyor" diye düşünüyor.Fakat 2'si birden eklenirse;

 import java.util.Date;
 import java.sql.Date;

Bu durumda da hata alınır.İki varsayılan olamayacağı için derleyici size şunları söyler:

error: reference to Date is ambiguous Date date; ^ both class java.util.Date in java.util and class java.sql.Date in java.sql match

Bazen Date'i iki farklı paketten kullanmak istersiniz. Bu olduğunda, içe aktarmada kullanmak üzere birini seçebilir ve özel olduğunu belirtmek için diğerinin tam nitelikli sınıf adını [paket adı, nokta (.) ve sınıf adı] kullanabilirsiniz.

Örneğin;

    Date date;
    java.sql.Date sqlDate; // yada

    java.util.Date date1;
    java.sql.Date sqlDate1;  // gibi

Varsayılan olarak, javac komutu, derlenmiş sınıfları kaynak kodla aynı dizine yerleştirir.Ayrıca sınıf dosyalarını farklı bir dizine yerleştirme seçeneği sunar. -d seçeneği bu hedef dizini belirtir.

javac -d classes packagea/ClassA.java packageb/ClassB.java

Programı çalıştırmak için sınıf yolunu belirtirsiniz, böylece Java sınıfları nerede bulacağını bilir. Kullanabileceğiniz üç seçenek vardır. Bunların üçü de aynı şeyi yapar:

java -cp classes packageb.ClassB
java -classpath classes packageb.ClassB
java --class-path classes packageb.ClassB

Jar Dosyası ile Derleme

Bu teknik, sınıf dosyaları başka bir yerde veya özel JAR dosyalarında bulunduğunda kullanışlıdır.

Windows için;

java -cp ".;C:\temp\someOtherLocation;c:\temp\myJar.jar" myPackage.MyClass

MacOS / Linux için;

 java -cp ".:/tmp/someOtherLocation:/tmp/myJar.jar" myPackage.MyClass

Jar Dosyası Oluşturma

Bunu yapmak için jar komutunu kullanırsınız. En basit komutlar, geçerli dizindeki dosyaları içeren bir jar oluşturur. Her seçenek için kısa veya uzun yazım şeklini kullanabilirsiniz.

jar -cvf myNewFile.jar . 

jar --create --verbose --file myNewFile.jar .

// Dizin göstererek
jar -cvf myNewFile.jar -C dir .

Yeni bir jar dosyası oluşturmak için.

-c
--create

JAR dosyalarıyla çalışırken ayrıntıları yazdırır.

-v
--verbose

Jar dosyası ismi.

-f <fileName>
--file
<fileName>

JAR'ı oluşturmak için kullanılacak dosyaları içeren dizin;

-C <directory>

Çıktıyı özetler;

-s
-summary

Bir modülün ayrıntılarını açıklar.

-d
--describe-module

Bir program çalıştırmadan gözlemlenebilir modülleri listeler.

--list-modules

Programı çalıştırırken modülleri gösterir.

--show-module-resolution

Modüler Olmayan Kodun Derlenmesi ve Çalıştırılması

Derlenmesi ;

javac -cp classpath -d directory classesToCompile

Çalıştırılması;

 java -cp classpath package.className

java -classpath classpath package.className

java --class-path class path package.className

Bir Modülün Compile Edilmesi

javac -p moduleFolderName -d directory classesToCompileIncludingModuleInfo

javac --module-path moduleFolderName -d directory classesToCompileIncludingModuleInfo

Modülün Çalıştırılması;

java -p moduleFolderName -m moduleName/package.className

java --module-path moduleFolderName --module moduleName/package.className

Burada temel modül komutlarına değinsemde genel olarak yazılarda modül sistemi ile ilgili bir yazı paylaşmayı düşünmüyorum.

Java 9 ile gelen modül sistemini daha detaylı öğrenmek için tabi ki öncelikle java dökümantasyonlarına bakmanızı tavsiye ederim.

Aşağıdaki adreslerden de okuyabilirsiniz.

Umarım faydalı olmuştur.

Görüşmek üzere.