JavaRush /Java Blogu /Random-AZ /Java-da kompilyasiya

Java-da kompilyasiya

Qrupda dərc edilmişdir
IDE-də proqramlaşdırma əladır: kod asılılıqlarının uyğunluğu, rahat sazlama, aydın sınaq, qaranlıq mövzu. Beləliklə, IDE sayəsində inkişaf sıçrayışlarla inkişaf edir. Amma o, rahatlaşır. Hər gün özünü IDE-nin funksionallığına qərq edərək, tərtibatçı bir düymə ilə işləməyə və ya iki kliklə tikməyə alışır. Java-da kompilyasiya - 1Vəziyyət lap əvvəldən IDE-də işləyən, komanda xəttindəki işə məhəl qoymayan proqramlaşdırmaya yeni başlayanlarla daha pisdir. Məsələn, Intellij IDEA-da Java proqramının tərtibi alt paneldəki yükləmə paneli ilə nümayiş etdirilir və bütün kompilyasiya parametrləri, sinif yolunun işlənməsi və Java həyatının digər zövqləri pərdə arxasında qalır. IDE olmadan Java-da kompilyasiya haqqında danışmağı təklif edirik. Bu məqalədəki nümunələri işə salmaq üçün maşınınızda JDK 1.7 və ya daha yeni versiyanın quraşdırıldığından əmin olun.

Proqramı necə tərtib etmək olar?

Proqramlaşdırmada kompilyasiya proqramın sonrakı başlaması üçün mənbə kodunun bayt koduna endirilməsidir. Mənbə kodundan proqramın işə salınmasına qədər hərəkətlərin ardıcıllığı belə görünür:
  1. ClassName.java adlı faylda mənbə kodu var;
  2. Əgər kodda xətalar yoxdursa, o, bayt koduna (ClassName.class faylında) tərtib edilir;
  3. Proqram başlayır.
Tipik olaraq, hər bir proqram ayrı bir kataloqda yerləşir. Sadə bir nümunə olaraq, çıxışı konsola götürək:
class Test {
   public static void main(String[] args) {
      System.out.println("Это говорит приложение из командной строки");
   }
}

javac əmri nə üçün istifadə olunur?

Yaxşı, birinci nöqtə tamamlandı. Anlamaq üçün daha da gedək: necə tərtib etmək olar? :) Bu işdə bizə javac əmri kömək edəcək, onun arqumenti tələb olunan faylı göstərməlidir:

javac Test.java
Əgər kodda heç bir səhv yoxdursa, Test.java faylının yanında Test.class faylı görünəcək. Bu tərtib edilmiş bayt kodudur. İndi onu işə salmaq lazımdır. Burada bayt kodunu işlədən java əmrindən istifadə edirik: Java-da kompilyasiya - 2Ekran görüntüsü göstərir ki, çıxışda bəzi heroqliflər əldə edirik: aydındır ki, bu, pozulmuş kodlaşdırmadır. Adətən bu, Windows sistemində baş verir. Kiril əlifbasını konsolda düzgün göstərmək üçün aşağıdakı əmrlər var:

REM change CHCP to UTF-8
CHCP 65001
CLS
Onlar cari pəncərənin müddəti üçün cari qabıq kod səhifəsini dəyişirlər. Yenidən cəhd edək:

D:\Java>java Test
Tətbiqin əmr satırından dediyi budur. Javac əmrinin necə işlədiyini bilmək çox faydalıdır, çünki bu əmr istənilən layihə qurma sisteminin əsasını təşkil edir.

Birdən çox siniflərin tərtib edilməsi və icrası

Bir neçə siniflə işləmək üçün bir sinif yolu lazımdır. Bu, siniflərin yerləşdiyi fayl sisteminə bənzəyir və paketlər qovluq kimi çıxış edir. Bu nöqtədə mənbə kodu fayllarını tərtib edilmiş fayllardan ayırmaq barədə düşünməyə dəyər. Bir qayda olaraq, mənbələr src kataloqunda, tərtib edilmiş siniflər isə bində yerləşir. Məsələn, bir sinifimiz BoxBoxMachinemetodu ehtiva edən bir sinifimiz var main. Sinif Box:
package src;

public class Box {
   private double size;

   public Box(double size) {
       this.size = size;
   }

   public String toString() {
       return "Box have size " + size;
   }
}
Bu src paketindədir, bu düzəldilməlidir. Sinif BoxMachine:
package src;

public class BoxMachine {
   public static void main(String[] args) {
       for(int  i = 0; i < 5; i++) {
           System.out.println(new Box(Math.random()*10));
       }
   }
}
Bu sinif src paketində də var. Metodda maino, müxtəlif ölçülü beş sinif obyekti yaradır Boxvə onlar haqqında məlumatları konsolda göstərir. Bu siniflər qrupunu tərtib etmək üçün arqumentlərlə əsas qovluqdan (src və bin qovluqlarını ehtiva edən) javac əmrindən istifadə etməlisiniz:

javac -d bin ./src/*
-d— bayraq, ondan sonra tərtib olunmuş dərslərin gedəcəyi yeri göstərməlisiniz. Bu, çox rahatdır, çünki məsələn, 1000 sinfi köçürmək çox əmək tələb edən bir prosesdir. bin— qovluq adı. ./src/*— mənbə faylların yeri. *bütün faylların tərtib edilməli olduğunu göstərir. İndi tərtib edilmiş siniflər bin qovluğunda görünür. Onları işə salmaq üçün arqumentlərlə eyni qovluqdan java əmrindən istifadə edin:

java -classpath ./bin BoxMachine
-classpath— bayraq, ondan sonra tərtib edilmiş siniflərin yerini göstərməlisiniz. Java bu kataloqda əsas sinfi və bütün əlaqəli sinifləri axtaracaq. ./bin— tərtib edilmiş siniflərin yerləşdiyi qovluğun adı. BoxMachine— əsas sinfin adı. Birinci halda olduğu kimi, qeyd edilməməlidir .class, çünki bu fayl deyil, sinfin adıdır. Nəticə:

D:\Java>java -classpath ./bin src.BoxMachine
Box have size 4.085985295359718
Box have size 8.63682158248986
Box have size 6.027448124299726
Box have size 7.288317703877914
Box have size 1.106181659384694

JAR fayllarının yaradılması

Proqramın porta salınmasını və işləməsini asanlaşdırmaq üçün siz tərtib edilmiş sinifləri jar faylına - sinif arxivinə toplaya bilərsiniz. Zip və ya rar arxivlərindən əsas fərq manifest faylının olmasıdır. Bu manifest jar faylı icra edildikdə işləyəcək əsas sinfi, sinif yolunu və bir çox əlavə məlumatları müəyyən edir. Əsas kataloqda manifest.mf faylı yaradaq. Onun məzmunu aşağıdakı kimi olacaq:

main-class: src.BoxMachine
class-path: bin/
main-classmainmetodu ehtiva edən və işə salındıqda icra ediləcək sinfi müəyyən edir . class-path— tərtib edilmiş siniflərə və ya əlavə kitabxanalara gedən yol. İndi jar əmrindən istifadə edərək IDE olmadan real proqram qurmağın vaxtıdır:

jar -cmf manifest.mf box-machine.jar  -C bin .
-cmf— bayraq, ondan sonra siz manifest faylına gedən yolu göstərməlisiniz. manifest.mf- manifestə gedən yol. box-machine.jar— çıxış jar faylının adı. — tərtib edilmiş siniflərə gedən yolun göstərildiyi bayraq. .— jar faylının yerləşdiriləcəyi yol. Bizim vəziyyətimizdə bu əsas kataloqdur. İndi işə sala bilərsiniz. Jar fayllarının işə salınması da java əmrindən istifadə etməklə həyata keçirilir, lakin sonra siz bayrağı göstərməlisiniz -jar: bu Jar faylının işə salındığını göstərir və ikinci arqument uzantı da daxil olmaqla fayla gedən yoldurjar :

java -jar box-machine.jar
Nəticə:

Box have size 5.5495235762547965
Box have size 9.695870044165662
Box have size 2.3408385788129227
Box have size 7.2790741216674135
Box have size 2.3620854470160513

Java-da IDE olmadan tərtib etmək: Quraşdırma Sistemlərinə Baxış

Komanda xəttinin istifadəsinin nisbi asanlığına baxmayaraq, ondan istifadə edərək orta və böyük layihələr qurmaq çox çətindir. Bu, çox vaxt aparır və müxtəlif dərəcəli səhvlərlə doludur. Xoşbəxtlikdən, iş prosesini xeyli asanlaşdıran montaj sistemləri var. Bir neçə komanda ilə bu sistem istənilən mürəkkəblikdə olan layihəni yığa bilir və belə sistemlərin mövcudluğu zamanı yaradılan plaginlərin bolluğu demək olar ki, hər hansı bir baş ağrısını aradan qaldıra bilir.

Java-nı necə tərtib etmək olar?

Ən məşhur Java qurma sistemləri Ant, Maven və Gradle-dir. Yaxşı və ya pis yoxdur: onların hər biri müəyyən problemləri həll etmək üçün yaradılmışdır. Onların hər birinə daha ətraflı baxaq.

qarışqa

Ant, xml faylı ilə təsvir edilmiş skriptdən istifadə edən bir qurma alətidir. xml fayl quruluşu:
<?xml version="1.0"?>
<project name="NameПроекта" default="сценарийПоУмолчанию">
    <target name="NameСценария">
  //  Действия сценария
        <echo>Hello, World!</echo>
    </target>
  //  Второй сценарий
  //  И тд
</project>
Əsas kataloqda aşağıdakı məzmunu olan build.xml faylı yaradaq:
<?xml version="1.0"?>
<project name="BoxMachine" default="test">
   <target name="test">
       <echo>First build in Ant!</echo>
   </target>
</project>
Eyni qovluqda qarışqa əmrini çağırın:

D:\Java>D:\Temp\ant\bin\ant
Buildfile: D:\Java\build.xml

test:
     [echo] First build in Ant!

BUILD SUCCESSFUL
Total time: 0 seconds
Teq <target>montaj və fayl sistemini idarə etməyə imkan verən müxtəlif tapşırıqları təyin edə bilər. Ant-ın sənədlərdə sadalanan 150-dən çox əmri var. Aşağıdakı nümunədə yalnız 5-dən istifadə edirik:
  • mkdir - kataloqların yaradılması
  • delete- faylların və qovluqların silinməsi
  • javac- Java kodunun tərtibi
  • java- tərtib edilmiş kodun işlədilməsi
Sadə tərtib, qurma və ya təmizləmə skripti belə görünür:
<?xml version="1.0"?>
<project name="BoxMachine" default="compile">
   <target name="compile">
       <mkdir dir="result/classes"/>
       <javac destdir="result/classes" includeantruntime="false">
           <src path="src"/>
       </javac>
   </target>
   <target name="run" depends="compile">
       <java classname="BoxMachine" classpath="result/classes"/>
   </target>
   <target name="clean">
       <delete dir="result"/>
   </target>
</project>
Skript üç hərəkəti təsvir edir - compile, ,code>run və clean. compileiçərisində sinifləri olan bir nəticə kataloqu yaradır, sonra sinifləri yaradılmış qovluğa tərtib etmək üçün javac-dan istifadə edir. runtərtib edilmiş sinifləri java əmri ilə işlədir. cleannəticə kataloqunu silir. Əsas kataloqda arqumentlər olmadan qarışqa əmrini icra etsəniz, kompilyasiya əməliyyatı yerinə yetiriləcək. Müəyyən bir hərəkətin yerinə yetirilməsi lazımdırsa, bu, arqumentdə göstərilir.

D:\Java>D:/Temp/ant/bin/ant compile
Buildfile: D:\Java\build.xml

compile:
    [mkdir] Created dir: D:\Java\result\classes
    [javac] Compiling 2 source files to D:\Java\result\classes

BUILD SUCCESSFUL
Total time: 1 second

Maven

Maven tikinti layihələri üçün bir az fərqli yanaşma təklif edir. Burada tərtibatçı daha çox öz layihəsini və istifadə etdiyi əlavə alətləri təsvir edir, Ant-dan fərqli olaraq, burada qurma hərəkətlər ardıcıllığıdır. Maven, asılılığın asan idarə edilməsi və bütün inkişaf mühitləri ilə rahat inteqrasiyası sayəsində tərtibatçılar arasında populyardır. Maven ilə işləyərkən biz aşağıdakı layihə strukturuna əməl edirik: Java-da kompilyasiya - 3Quraşdırma qaydaları, asılılıqlar və s. pom.xml faylında təsvir edilmişdir. Bir qayda olaraq, o, əsas layihə qovluğunda yerləşir. Başlanğıcda Maven fayl strukturunu və sintaksisini yoxlayır, səhvlər barədə xəbərdarlıq edir. Əsas kataloqda bin və src qovluqlarının yanında pom.xml faylı yaradın, içərisinə əlavə edin:
<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>ru.javarush.testmaven</groupId>
  <artifactId>testMavenWithoutIde</artifactId>
  <version>1.0.0</version>

  <build>
     <defaultGoal>compile</defaultGoal>
     <sourceDirectory>src</sourceDirectory>
     <outputDirectory>bin</outputDirectory>
     <finalName>${project.artifactId}-${project.version}</finalName>
  </build>
</project>
Sonra, komanda xəttində mvn əmrini işlədin:

D:\Java>mvn
[INFO] Scanning for projects...
[INFO]
[INFO] -------------< ru.javarush.testmaven:testMavenWithoutIde >--------------
[INFO] Building testMavenWithoutIde 1.0.0
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ testMavenWithoutIde ---
[WARNING] Using platform encoding (Cp1251 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory D:\Java\src\main\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ testMavenWithoutIde ---
[INFO] Changes detected - recompiling the module!
[WARNING] File encoding has not been set, using platform encoding Cp1251, i.e. build is platform dependent!
[INFO] Compiling 2 source files to D:\Java\bin
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 15.521 s
[INFO] Finished at: 2019-06-25T20:18:05+03:00
[INFO] ------------------------------------------------------------------------
İndi bin qovluğunda tərtib edilmiş sinifləri ehtiva edən src qovluğu var. Pom.xml-də qurma teqi qurmanın məqsədini müəyyən edir - kompilyasiya, mənbə kodunun kataloqları və kompilyasiya nəticə faylları, həmçinin layihənin adı. Maven testlər aparmaq, Jar faylları yaratmaq, paylamalar qurmaq və digər tapşırıqlar üçün müxtəlif qurma hədəfləri və plaginlərə malikdir.

Gradle

Bu, Ant və Maven-ə əsaslanan ən gənc quruluş sistemidir. Əsas fərq, tapşırıqların ardıcıllığını təyin etmək üçün asiklik qrafik əsasında işləməsidir. Bu, artımlı və çox layihəli quruluşlar kimi daha mürəkkəb tapşırıqlar üçün çox faydalıdır. Gradle ilə qurarkən, Maven layihə qovluq strukturuna sadiq qalmaq da tövsiyə olunur. Yeri gəlmişkən, Gradle-də tikinti faylı build.gradle adlanır və Maven faylından çox kiçik görünür. Dərslərimiz üçün nümunə:
apply plugin: 'java'
apply plugin: 'application'

sourceSets {
   main {
       java {
           srcDirs 'src'
       }
   }
}
sourceSets.main.output.classesDir = file("bin")

mainClassName = "src.BoxMachine"

defaultTasks 'compileJava', 'run'
Fayla plaginlər daxildir, mənbə kodu fayllarının kataloqunu (əgər Maven layihə strukturu istifadə olunmursa), qurma nəticələrinin kataloqunu, əsas sinfin adını və standart tapşırıqları müəyyən edir. build.gradle faylının yerləşdiyi qovluqdakı gradle əmri quruluşun başlamasına cavabdehdir:

d:\Java>D:\Temp\gradle\bin\gradle

Welcome to Gradle 5.4.1!

Here are the highlights of this release:
 - Run builds with JDK12
 - New API for Incremental Tasks
 - Updates to native projects, including Swift 5 support

For more details see https://docs.gradle.org/5.4.1/release-notes.html

Starting a Gradle Daemon (subsequent builds will be faster)

> Task :help

Welcome to Gradle 5.4.1.

To run a build, run gradle <task> ...

To see a list of available tasks, run gradle tasks

To see a list of command-line options, run gradle --help

To see more detail about a task, run gradle help --task <task>

For troubleshooting, visit https://help.gradle.org

BUILD SUCCESSFUL in 52s
1 actionable task: 1 executed

Nəticə

İlk baxışdan kodu IDE olmadan tərtib etmək və yığmaq bacarığı faydasız görünür. Həqiqətən, plaginləri olan rahat bir IDE, mümkün olan hər şeyi avtomatik yoxlama (müasir IDE-lər IQ səviyyəsini yoxlamır) və populyar sistemlərlə inteqrasiya olduqda komanda xətləri və Google bütün əmrləri ilə niyə narahat olursunuz. Bununla belə, təcrübə göstərir ki, inkişaf mühiti olmadan kodu toplamaq və bu prosesin hər bir addımını başa düşmək çətin bir zərurətdir. Bu bacarıq sizin və şirkətiniz üçün çoxlu sinir hüceyrələrinə və vaxtınıza qənaət edəcək. Siz IDE-dən necə istifadə etməyi öyrənə, kod yazmağa məşq edə və təbii ki, Java proqramlaşdırmasının əsaslarını buradan - JavaRush-da əldə edə bilərsiniz. Öyrənməyə qayıtmağın vaxtıdır :)
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION