Pure Java – 93 – Development – java & javac

Merhaba Arkadaslar,
Bu bolumde komut satirinda java ve javac komutlarinin terminal/command line kullanimini inceleyecegiz.

javac komutu ile derleme(compiling with javac)

javac komutu , Compiler/derleyiciyi calistirmak/invoke icin kullanilir. javac komutunun bir cok option/secenegi vardir. Sinavda onemli olan option’lar -classpath ve -d 

javac [options] [source files]

Bu option’larin neler oldugunu gormek icin -help option kullanilablir.

javac -help

Usage: javac  
where possible options include:
  -g                         Generate all debugging info
  -g:none                    Generate no debugging info
  -g:{lines,vars,source}     Generate only some debugging info
  -nowarn                    Generate no warnings
  -verbose                   Output messages about what the compiler is doing
  -deprecation               Output source locations where deprecated APIs are used
  -classpath           Specify where to find user class files and annotation processors
  -cp                  Specify where to find user class files and annotation processors
  -sourcepath          Specify where to find input source files
  -bootclasspath       Override location of bootstrap class files
  -extdirs             Override location of installed extensions
  -endorseddirs        Override location of endorsed standards path
  -proc:{none,only}          Control whether annotation processing and/or compilation is done.
  -processor [,,...] Names of the annotation processors to run; bypasses default discovery process
  -processorpath       Specify where to find annotation processors
  -d              Specify where to place generated class files
  -s              Specify where to place generated source files
  -implicit:{none,class}     Specify whether or not to generate class files for implicitly referenced files
  -encoding        Specify character encoding used by source files
  -source           Provide source compatibility with specified release
  -target           Generate class files for specific VM version
  -version                   Version information
  -help                      Print a synopsis of standard options
  -Akey[=value]              Options to pass to annotation processors
  -X                         Print a synopsis of nonstandard options
  -J                   Pass  directly to the runtime system
  -Werror                    Terminate compilation if warnings occur
  @                Read options and filenames from file



Compiling with -d

myProject/source/ dizininde MyClass.java adinda bir dosya olusturalim. Icerigi su sekilde olsun;

public class MyClass { }
myProject
|
| --- source
|   |
|   | --- MyClass.java
|
| --- classes
|
|--

myProject dizininde olalim sonrasinda komut satirinda su komutu calistiralim;

javac source/MyClass.java

javac1

MyClass.java dosyamizi derledigimizde MyClass.class dosyamiz varsayilan/default olarak .java dosyasi ile ayni dizinde olusacaktir. Peki biz farkli bir dizinde .class dosyasini olusturmak istersek ne yapmaliyiz ? Bu durumda -d option’ini kullanabiliriz.

Ornegin MyClass.java dosyamizin derlenmis halini myProject/classes dizini altinda olmasini istiyoruz. Bu durumda classes dizinini myProject dizini altina olusturalim.

javac -d classes source/MyClass.java

javac 2 d option

MyClass.class dosyamiz myProject/classes dizini altinda olustu.

MyClass.java dosyamizda package tanimi yer almiyordu. Bu dosyamiza com.injavawetrust package tanimini ekleyelim ve paket tanimina uygun olarak com/injavawetrust dizini altina koyalim.

package com.injavawetrust;
public class MyClass { }
myProject
|
|--source
|     |
|     |--com
|     |
|         |--injavawetrust
|            |
|            |--MyClass.java
|
|--classes
|     |
|    
|         
|       
|        
|         

MyClass.java dosyamizin derlenmis halinin(.class) , myProject/classes altinda olmasini istiyoruz.

myProject dizininden su komutu yazabiliriz;

javac -d classes source/com/injavawetrust/MyClass.java 

source dizininden su komutu yazabiliriz;

javac -d ../classes com/injavawetrust/MyClass.java

..(iki nokta) bir ust dizini temsil eder. source dizininin ust dizinine git oradaki classes klasorunu bul anlamindadir.

Bu komutulari calistirdigimizda classes dizini altinda com/injavawetrust alt dizinleri olusacaktir ve injavawetrust klasorumuz altinda MyClass.class dosyamiz yer alacaktir.

Burada alt klasorleri kendisi olusturacaktir ,fakat ornegin olmayan bir ana dizin kullanmaya calisirsak  kendisi olusturmayacaktir.

javac -d ../classes2 com/injavawetrust/MyClass.java

javac: directory not found: classes2

the java command

javac komutu ile .java uzantili dosyamizi derleyerek .class uzantili dosya haline getiririz. java komutu ile de bu derledigimiz .class uzantili dosyamizi calistirabiliriz.

Genel format ;
java [options] class [args]

public class HelloJava{

	public static void main(String[] args) {
		System.out.println("Hello Java World.");
	}
}

Bu basit ornegimizi javac komutu ile derleyelim ;

javac HelloJava.java

Derledikten sonra HelloJava.class dosyamizi calistiralim;
Burada dikkat edelim calistirmak icin javac komutu degil java komutunu kullaniyoruz. Ikinci olarak derlerken dosya ismini .java olarak belirtmemiz gerekirken , calistirirken .class uzantisi olmamali.

java HelloJava

Sinav icin bilmemiz gereken options ; classpath(-cp)  ve -D dir . -D yardimi ile yeni bir system property’si olusturup kullanabiliriz.

import java.util.*;

public class TestProps {
	public static void main(String[] args) {
		Properties p = System.getProperties();
		String propertyValue = p.getProperty("myProp");
		System.out.println("propertyValue:" + propertyValue);
	}
}

TestProps sinifimizi derleyelim.

javac TestProps.java

TestProps sinifina dikkat edecek olursak myProp isminde bir property’i degerini getProperty methodu ile almakta daha sonrasinde console basmaktadir. -D yardimi ile bu property degerini verebiliriz.

java -DmyProp=Levent TestProps

Ekran ciktisi ;

propertyValue:Levent

-D kullanmazsak bu durumda ;

java TestProps
propertyValue:null

Eger bosluk kullanilacaksa bu durumda cift tirnak arasinda olmalidir

java -DmyProp="be an oracle man, import java.*" TestProps

Property ismi -D’den hemen sonra olmalidir,arada bosluk olmamalidir.

java -D myProp=Levent TestProps

= (esittir) den once ve sonra bosluk olmamalidir.

java -DmyProp= Levent TestProps

java -DmyProp =Levent TestProps

java -DmyProp = Levent TestProps

Command-Line Arguments

public class CommandArgs {
	public static void main(String[] args) {

		for (String arg : args) {
			System.out.println(arg);
		}
	}
}

Dosyamizi derleyelim ;

javac CommandArgs.java

Kodumuzu calistirirken command-line argument verelim;

java CommandArgs be an oracle man , import java.*;

args dizine 0.indexten baslayarak
args[0] = be
args[1] = an
args[2] = oracle
args[3] = man
args[4] = ,
args[4] = import
args[4] = java.*;
seklinde atanacaktir. Dolayisiyla dongu ile yazdirdigimizda ;

be
an
oracle
man
,
import
java.*;

Bosluga gore tek tek arguman olarak degerlendirecek , bir butun olarak yapmak icin yine cift tirnak kullanabiliriz.

java CommandArgs "be an oracle man , import java.*;"

be an oracle man , import java.*;

main metodunda String [] args kullanabildigimiz gibi var-args yapisini da kullanabiliriz.

public class CommandArgs {
	public static void main(String ...args) {

		for (String arg : args) {
			System.out.println(arg);
		}
	}
}

Yazimi burada sonlandiriyorum.
Herkese Bol Javali Gunler dilerim.
Be an oracle man , import java.*;
Levent Erguder
OCP, Java SE 6 Programmer
OCE, Java EE 6 Web Component Developer

Print Friendly, PDF & Email

Leave a Reply

Your email address will not be published. Required fields are marked *