JavaRush /Java Blogu /Random-AZ /Java-nın IDE olmadan tərtib edilməsi və işlədilməsi
Ve4niY
Səviyyə

Java-nın IDE olmadan tərtib edilməsi və işlədilməsi

Qrupda dərc edilmişdir
Bir dəfə reddit.com saytında, Java-nın IDE olmadan tərtib edilməsi və işlədilməsi mövzusunda sual verildi: Paketin içərisində olan bir qrup Java faylını ayrı bir qovluğa ( bin deyək ) yığan bir əmr varmı? və yeni sinif fayllarını işə salmaq üçün necə gedərdim? " Java-nın IDE olmadan tərtib edilməsi və işlədilməsi - 1Mövzunun müəllifi kylolink izah edir: "Mən Java-dan istifadə etməyə başlayanda bütün kompilyasiyanı mənim üçün etmək üçün Eclipse-ə güvənirdim və sadəcə kodu yazmaqdan narahat idim." Bu sualı dəfələrlə görmüşəm və həqiqətən də bu GPS sistemləri və IDE-lər haqqında blog yazısı yazmağa məni nə vadar etdi: yaxşı və ya pis?Mən güclü müasir Java IDE-ləri sevirəm və onlar gündəlik həyatımı asanlaşdırır, lakin sadə Java nümunələrini necə qurmağı və işlətməyi bilməyin də faydaları var. onlarsız.Bu yazı məhz bunu necə etmək haqqındadır.Sadə testlərlə Java öyrənməklə bağlı bloqumda mən sadə proqramları yazmaq, qurmaq və işə salmaq üçün bəzən sadə mətn redaktoru və komanda xətti alətlərindən necə istifadə etməyi xoşladığım barədə yazmışam. İndi mənim sevimli Java IDE-lərin nə qədər “qabaqcıl” tələb etdiyi barədə kifayət qədər yaxşı bir fikrə sahib olun və çərçivədən istifadə etməklə əldə edilən faydaların “qabaqcıl məsrəfləri” əsaslandırmaq üçün kifayət olub-olmadığına dair erkən qərar verin. Əksər real tətbiqlərdə VL IDE-nin çox dəyərli olduğuna şübhə yoxdur. Ancaq ən sadə nümunə tətbiqləri üçün bu həmişə belə olmur. Bu yazının qalan hissəsi bu vəziyyətlər üçün IDE olmadan Java kodunun necə qurulacağını və işlədiləcəyini göstərir.

Java kodunun yazılması və icrası

Nümunəni daha aydın etmək üçün mən kompozisiya və ya miras yolu ilə bir-biri ilə əlaqəli olan və dustin.examples adlı eyni paketdə olan çox sadə Java siniflərindən istifadə edəcəyəm . İki sinifdə funksiya çatışmır ; üçüncü sinif Main.java, IDE olmadan sinfi necə idarə etməyi nümayiş etdirməyə imkan verən mainfunksiyaya malikdir . mainAşağıda bu üç sinif üçün kod verilmişdir: Parent.java
package dustin.examples;

public class Parent
{
   @Override
   public String toString()
   {
      return "I'm the Parent.";
   }
}
Uşaq.java
package dustin.examples;

public class Child extends Parent
{
   @Override
   public String toString()
   {
      return "I'm the Child.";
   }
}
Main.java
package dustin.examples;

import static java.lang.System.out;

public class Main
{
   private final Parent parent = new Parent();
   private final Child child = new Child();

   public static void main(final String[] arguments)
   {
      final Main instance = new Main();
      out.println(instance.parent);
      out.println(instance.child);
   }
}
Aşağıdakı skrinşot bu .java sinifləri ilə kataloq strukturunu göstərir.Skrinşot göstərir ki, mənbə faylları paket adını təmsil edən kataloq iyerarxiyasındadır ( paket məlumatı dustin.examples olduğu üçün dustin/examples ) və bu paket kataloq iyerarxiyasını əks etdirir SRC alt kataloqunun altındadır. Mən həmçinin tərtib edilmiş .class fayllarını yerləşdirmək üçün siniflər alt kataloqu (hazırda boşdur) yaratdım ki, Javac mövcud olmayanda bu kataloqu yaratmasın.

JAVAC ilə qurmaq və Java ilə işləmək

Java kodunu (Ant, Maven, Gradle və ya IDE) yaratmaq üçün hansı yanaşmadan istifadə etməsindən asılı olmayaraq, o, sonda JAVAC-a düşür. Oracle/Sun-da təqdim olunan JAVAC komanda xətti alətindəki standart seçimləri JAVAC -help işlətməklə və əlavə genişləndirmə seçimlərini JAVAC -help -X işlətməklə görmək olar. Bu seçimlərdən necə istifadə etmək barədə daha ətraflı məlumatı Windows və ya Unix/Linux üçün JAVAC aləti sənədlərində tapa bilərsiniz. Javac sənədlərində deyildiyi kimi, -sourcepath seçimi mənbə fayllarının mövcud olduğu kataloqu ifadə etmək üçün istifadə edilə bilər. Yuxarıdakı ekran görüntüsündə göstərilən kataloq strukturumda bu o deməkdir ki, mən C:\Java\examples\javacAndJava\ qovluğundan JAVAC əmrini işlədirəmsə , mənim əmrimdə belə bir şey olmalıdır: Javac -sourcepath src SRC\Dustin\nümunələr\*. Java . Aşağıdakı ekran görüntüsü bunun nəticələrini göstərir. .classJava-nın IDE olmadan tərtib edilməsi və işlədilməsi - 2 faylları üçün qovluq təyin etmədiyimiz üçün , onlar ilkin olaraq tərtib olunduqları mənbə .java faylları ilə eyni kataloqda yerləşdirildi . Bu vəziyyəti düzəltmək üçün seçimdən istifadə edə bilərik . Komandamız indi, məsələn, Javac -sourcepath src -d sinifləri src\Dustin\examples\* kimi işlədilə bilər. Mən sən . Daha əvvəl qeyd edildiyi kimi, seçilmiş qovluq (siniflər) artıq mövcud olmalıdır. Bu baş verdikdə, komanda .class fayllarını aşağıdakı skrinşotda göstərildiyi kimi göstərilən qovluğa yerləşdirəcək. Java mənbə faylları göstərilən kataloqda müvafiq .class fayllarına yığılmaqla , biz proqramın sürətli işə salma menyusundan istifadə edərək proqramı işə sala bilərik. Java əmr xətti aləti. Bu, sadəcə olaraq Java -help və ya Java alətləri səhifələrində verilmiş təlimatlara əməl etməklə və ( və ya ) seçimi ilə .class fayllarının yerini müəyyən etməklə həyata keçirilir . .class fayllarının axtarılacağı siniflər kataloqunu müəyyən etmək üçün hər iki yanaşmadan istifadə aşağıdakı ekran görüntüsündə nümayiş etdirilir. Son arqument icra ediləcək əsas funksiyaya malik olan sinfin tam (bütün Java paketi) adıdır. Aşağıdakı ekran görüntüsündə nümayiş etdirilən əmrlər java sinifləridir -cp dustin.examples.Main və java sinifləri -classpath dustin.examples.Main. -dJava-nın IDE olmadan tərtib edilməsi və işlədilməsi - 3-classpath-cpJava-nın IDE olmadan tərtib edilməsi və işlədilməsi - 4

Qurmaq və qarışqa ilə qaçmaq

Ən sadə Java proqramları üçün, indi göstərildiyi kimi, müvafiq olaraq proqram yaratmaq və işə salmaq üçün JAVAC və Java-dan istifadə etmək olduqca asandır. Tətbiqlər bir az daha mürəkkəbləşdikcə (məsələn, birdən çox paketdə/kataloqda mövcud olan kod və ya üçüncü tərəf kitabxanaları və çərçivələrindən daha mürəkkəb asılılıq siniflərində) bu yanaşma çətinləşə bilər. Apache Ant "böyük üç" Java qurma alətlərindən ən qədimidir və minlərlə proqram və tətbiqetmədə istifadə edilmişdir. Əvvəlki bloq yazımda dediyim kimi, çox sadə Ant qurma faylını yaratmaq asandır, xüsusən də bu yazıda qeyd etdiyim kimi şablonla başlayarsa. Aşağıdakı kod siyahısı Qarışqanın build.xml faylı üçündür ki, bu fayl .java fayllarını .class fayllarına tərtib etmək və sonra yuxarıda JAVAC və Java ilə edildiyi kimi dustin.examples.Main sinfini işə salmaq üçün istifadə edilə bilər . build.xml
<?xml version="1.0" encoding="UTF-8"?>
<project name="BuildingSansIDE" default="run" basedir=".">
   <description>Building Simple Java Applications Without An IDE</description>

   <target name="compile"
           description="Compile the Java code.">
      <javac srcdir="src"
             destdir="classes"
             debug="true"
      includeantruntime="false" />
   </target>

   <target name="run" depends="compile"
           description="Run the Java application.">
      <java classname="dustin.examples.Main" fork="true">
         <classpath>
           <pathelement path="classes"/>
         </classpath>
      </java>
   </target>
</project>
Mən Ant xassələrindən istifadə etməmişəm və bu nümunəni mümkün qədər sadə saxlamaq və JAVAC və Java istifadə edərək əvvəlki nümunəyə yaxın saxlamaq üçün adətən daxil etdiyim ümumi məqsədləri (“saf” və “Javadoc” kimi) daxil etməmişəm. . Onu da nəzərə alın ki, mən JAVAC Ant tapşırığı üçün "doğru" olaraq təyin edilmiş "debug"u aktiv etdim, çünki bu, Ant uğursuzluğu zamanı doğru deyil, JAVAC-ın defoltunda doğrudur. Təəccüblü deyil ki, Javac tapşırığı və Java Ant tapşırığı JAVAC əmr alətləri və Java-ya bənzəyir. Defolt adını istifadə etdiyim üçün Ant açıq şəkildə göstərilmədikdə (build.xml) qurma faylı gözləyir və bu quruluş üçün "defolt" olaraq "Çalış" hədəfini təmin etdiyim üçün və "kompilyasiya"nı asılılıq icrası kimi daxil etdiyim üçün "Çalış" hədəfi və Qarışqa mənim mühitimdə olduğu üçün əmr sətirində etməli olduğum tək şey Ant-a build.xml faylı ilə qovluqdakı qarışqa nümunəsini tərtib etmək və işə salmaq idi . Bu, aşağıdakı ekran görüntüsündə göstərilir. Java-nın IDE olmadan tərtib edilməsi və işlədilməsi - 5Ant ilə sadə Java proqramını tərtib etməyi və işlətməyi nümayiş etdirməyimə baxmayaraq, mən yalnız Ant ilə tərtib etməyə və Java ilə (yaxud sinif yolu ağırdırsa Java-nı çağıran skript) işlədirəm.

Maven ilə qurmaq və işləmək

Ant ilk əsas Java qurma aləti olsa da, Apache Maven nəhayət öz şöhrətini konvensiya əsaslı konfiqurasiyanın qəbulu və ortaq kitabxana anbarları üçün dəstəyi sayəsində qazandı. Kod və yaradılan obyektlər onun standart kataloq tərtibatına əməl etdikdə Maven-dən istifadə etmək asandır. Təəssüf ki, mənim nümunəm bu kataloq strukturuna əməl etmir, lakin Maven bizə gözlənilən standart kataloq strukturunu ləğv etməyə imkan verir. Aşağıda mənbə və hədəf qovluqların yerinə istifadə edilən və Maven 3.2.1 istifadə edərək Maven quruluşu üçün digər minimum tələb olunan elementləri təmin edən Maven POM faylı üçün kodların siyahısı verilmişdir. pom.xml
<project>
   <modelVersion>4.0.0</modelVersion>
   <groupId>dustin.examples</groupId>
   <artifactId>CompilingAndRunningWithoutIDE</artifactId>
   <version>1</version>

   <build>
      <defaultGoal>compile</defaultGoal>
      <sourceDirectory>src</sourceDirectory>
      <outputDirectory>classes</outputDirectory>
      <finalName>${project.artifactId}-${project.version}</finalName>
   </build>
</project>
Yuxarıdakı pom.xml faylı "kompilyasiya"nın "defaultMəqsədi"ni təyin etdiyinə və pom.xml faylları Maven icra edilə biləninin (MVN) axtardığı defolt POM xüsusi olduğundan və Maven quraşdırma qutusu qovluğu mənim yolumda olduğuna görə, yalnız Aşağıdakı ekran görüntüsündə qeyd edildiyi kimi .class fayllarını tərtib etmək üçün "MVN" işlətməliyəm. Java-nın IDE olmadan tərtib edilməsi və işlədilməsi - 6Mən həmçinin Mvn Exec əmrindən istifadə edərək Maven-dən tərtib edilmiş proqramı işə sala bilərəm : Java -Dexec.mainClass = dustin.examples.Main , bu, aşağıdakı ekran görüntüsündə müşahidə olunur. Java-nın IDE olmadan tərtib edilməsi və işlədilməsi - 7Ant-da olduğu kimi, mən sadə Java proqramımı işə salmaq üçün Maven-dən istifadə etmirəm, bunun əvəzinə tərtib edilmiş kodda Java-dan istifadə edirəm (və ya uzun siniflərdə birbaşa Java-ya zəng edən skriptdən istifadə edirəm).

Gradle ilə tikinti və işləmə

Gradle üç əsas Java qurma alətindən ən yeni, ən dəbli və şıkdır. Mən bəzən dəbdə olanın mahiyyətinə şübhə ilə yanaşıram, lakin Gradle haqqında xoşuma gələn bir çox şeylər tapdım (XML əvəzinə Groovy ilə yazılmış, quraşdırılmış Ant dəstəyi, daxili Ivy dəstəyi, konvensiya ilə konfiqurasiya asandır. yenidən konfiqurasiya etmək, Maven depo dəstəyi və s.). Aşağıdakı nümunə, bu yazı üçün əsas nümunə kodu olan sadə bir tətbiqi tərtib etmək və işə salmaq üçün istifadə edilə bilən Gradle quruluşunu göstərir. Bu uyğunlaşdırılmış nümunəni Simple Gradle Java Plugin Customization bloqunda təqdim etdim. build.gradle
apply plugin: 'java'
apply plugin: 'application'

// Redefine where Gradle should expect Java source files (*.java)
sourceSets {
    main {
        java {
            srcDirs 'src'
        }
    }
}

// Redefine where .class files are written
sourceSets.main.output.classesDir = file("classes")

// Specify main class to be executed
mainClassName = "dustin.examples.Main"

defaultTasks 'compileJava', 'run'
build.gradle faylından ilk iki sətir Java plagininin və Tətbiq plagininin istifadəsini göstərir, nəticədə bu quruluşa avtomatik olaraq bir sıra funksionallıq daxil edilir. "sourceSets" və "sourceSets.main.output.classesDir"-in müəyyən edilməsi, müvafiq olaraq Java mənbə kodu və tərtib edilmiş binar siniflər üçün Gradle plagininin defolt Java qovluqlarını ləğv etməyə imkan verir. Tətbiq plagini. "defaultTasks" sətri sadəcə əmr satırında "Gradle" yazmaqla yerinə yetiriləcək tapşırıqları müəyyən edir: 'compileJava' Java plagini tərəfindən təmin edilən standart tapşırıqdır və 'Çalış' Tətbiq plagininin təqdim etdiyi standart tapşırıqdır. Montajları build.gradle adlandırdığım üçün və buna görə də defolt tapşırıqları 'compileJava' və 'Run' olaraq təyin etdim və mənim yolumda Gradle quraşdırma qutusu kataloqu olduğuna görə, nümunələri qurmaq və işə salmaq üçün etməli olduğum tək şey tip idi. 'Gradle' və bu aşağıdakı ekran görüntüsündə nümayiş etdirilir. Java-nın IDE olmadan tərtib edilməsi və işlədilməsi - 8Ən böyük skeptik belə etiraf etməlidir ki, Gradle konstruksiyaları bu sadə nümunə üçün çox sürüşkəndir. O, müəyyən konvensiyalara və fərziyyələrə əsaslanmağın yığcamlığını zəruri hallarda defoltları ləğv etmək üçün çox asan mexanizmlə birləşdirir. XML əvəzinə Groovy-də olması da çox cəlbedicidir! Ant və Maven ilə olduğu kimi, mən də yalnız bu alətlərlə qurmağa meylli oluram və tərtib edilmiş .class fayllarını birbaşa Java-dan və ya Java-ya zəng edən skriptdən işə salmağa meyl edirəm. Yeri gəlmişkən, mən də bu .sinifləri işə salmaq üçün bir bankaya arxivləşdirməyə meylli oluram, lakin bu, bu məqalənin əhatə dairəsindən kənardadır.

Nəticə

Sadə tətbiqlər və nümunələr yaratmaq üçün bir IDE çox vaxt lazım deyil və sadə nümunələr yaratmaq xərcindən daha bahalı ola bilər. Belə olan halda, nümunələri birbaşa qurmaq və işə salmaq üçün JAVAC və Java-dan istifadə etmək olduqca asandır. Daha çox cəlb olunmağa nümunə olaraq, Ant, Maven və ya Gradle kimi bir qurma aləti daha cəlbedici olur. Bir çox inkişaf mühitinin bu qurma yardımçılarını dəstəkləməsi o deməkdir ki, sadə proqram tam hüquqlu bir layihəyə çevrildiyi üçün IDE dəstəyinə ehtiyac olduğu müəyyən edilərsə, tərtibatçı prosesdə əvvəllər yaradılmış daxili alətdən istifadə edərək IDE-yə köçə bilər. .
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION