JavaRush /Java Blog /Random-TK /Java-da düzmek

Java-da düzmek

Toparda çap edildi
IDE-de programmirlemek ajaýyp: kodlara baglylygyň sazlaşygy, amatly düzediş, anyk synag, garaňky tema. Şeýlelik bilen, IDE-iň kömegi bilen ösüş bökdençlikler bilen ösýär. Emma ol dynç alýar. Her gün IDE-iň işleýşine çümüp, dörediji bir düwme bilen ýa-da iki gezek basmak bilen gurmaga öwrenişýär. Java-da düzmek - 1Buýruk setirindäki işe ähmiýet bermän, ilkibaşdan IDE-de işleýän programmirleme bilen täze bolanlar bilen ýagdaý has erbet. Mysal üçin, Intellij IDEA-da Java programmasynyň düzülişi aşaky paneldäki ýükleme paneli bilen görkezilýär we ähli düzüliş parametrleri, synp ýollaryny gaýtadan işlemek we Java durmuşynyň beýleki lezzetleri sahnanyň aňyrsynda galýar. Java-da IDE bolmazdan düzmek hakda gürleşmegi maslahat berýäris. Bu makaladaky mysallary işletmek üçin JDK 1.7 ýa-da soňraky enjamyňyza gurnalandygyna göz ýetiriň.

Programmany nädip düzmeli?

Programmirlemekde jemlemek, programmanyň indiki başlamagy üçin deslapky kody kod koduna azaltmakdyr. Çeşme kodundan programma başlamagyna çenli hereketleriň yzygiderliligi şeýle:
  1. ClassName.java atly faýlda deslapky kod bar;
  2. Kodda ýalňyşlyklar ýok bolsa, ol kod kody bilen düzülýär (ClassName.class faýlynda);
  3. Programma başlaýar.
Adatça, her bir programma aýratyn katalogda bolýar. Simpleönekeý mysal hökmünde çykyşy konsola alyp göreliň:
class Test {
   public static void main(String[] args) {
      System.out.println("Это говорит приложение из командной строки");
   }
}

Javac buýrugy näme üçin ulanylýar?

Bolýar, birinji nokat edildi. Geliň, has giňişleýin düşüneliň: nädip düzmeli? :) Javac buýrugy bu meselede bize kömek eder, argumenti zerur faýly görkezmeli:

javac Test.java
Kodda ýalňyşlyk ýok bolsa, Test.java faýlynyň gapdalynda Test.class faýly peýda bolar. Bu düzülen kod kody. Indi işe girizilmeli. Bu ýerde bytekody işleýän java buýrugyny ulanýarys: Java-da düzmek - 2Ekranyň suraty çykyşda käbir ieroglifleri alýandygymyzy görkezýär: elbetde, bu bozulan kodlama. Adatça bu Windows ulgamynda bolýar. Konsolda kiril elipbiýini dogry görkezmek üçin aşakdaky buýruklar bar:

REM change CHCP to UTF-8
CHCP 65001
CLS
Häzirki penjiräniň dowamlylygy üçin häzirki gabyk kody sahypasyny üýtgedýärler. Againene synanyşalyň:

D:\Java>java Test
Programmanyň buýruk setirinden aýdýan zady. Javac buýrugynyň nähili işleýändigini bilmek gaty peýdaly, sebäbi bu buýruk islendik taslama gurmak ulgamynyň esasyny düzýär.

Birnäçe synplary düzmek we işletmek

Birnäçe synp bilen işlemek üçin synp ýoly gerek. Bu sapaklary öz içine alýan faýl ulgamyna meňzeýär we paketler bukjalar hökmünde çykyş edýär. Bu pursatda deslapky kod faýllaryny düzülen faýllardan aýyrmak hakda pikirlenmeli. Düzgün bolşy ýaly, çeşmeler src katalogynda we düzülen synplar binada ýerleşýär. Mysal üçin, usuly öz içine alýan synpymyz Boxwe synpymyz bar . Synp : BoxMachinemainBox
package src;

public class Box {
   private double size;

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

   public String toString() {
       return "Box have size " + size;
   }
}
Src paketinde, muny düzetmeli. Synp 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 synp src paketinde hem bar. Usulda dürli ululykdaky mainbäş synp obýektini döredýär Boxwe olar hakda maglumatlary konsola görkezýär. Bu synplar toparyny düzmek üçin esasy katalogdan (src we bin bukjalaryny öz içine alýan) javac buýrugyny argumentler bilen ulanmaly:

javac -d bin ./src/*
-d- şondan soň düzülen synplaryň gitjek ýerini görkezmeli baýdak. Bu gaty amatly, sebäbi, meselem, 1000 synp geçirmek gaty köp iş talap edýär. bin- bukjanyň ady ./src/*- çeşme faýllarynyň ýerleşýän ýeri. *ähli faýllaryň düzülmelidigini görkezýär. Indi düzülen synplar bin bukjasynda peýda bolýar. Olary işletmek üçin argumentler bilen şol bir katalogdan java buýrugyny ulanyň:

java -classpath ./bin BoxMachine
-classpath- şondan soň düzülen synplaryň ýerleşýän ýerini görkezmeli baýdak. Java bu katalogda esasy synpy we beýleki baglanyşyklylary gözlär. ./bin- düzülen synplaryň ýerleşýän bukjasynyň ady. BoxMachine- esasy synpyň ady. Birinji ýagdaýda bolşy ýaly, görkezilmeli däl .class, sebäbi bu faýl däl-de, synpyň ady. Netije:

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 faýllaryny döretmek

Programmany daşamak we işletmek aňsatlaşdyrmak üçin, düzülen synplary banka faýlyna - synp arhiwine ýygnap bilersiňiz. Zip ýa-da seýrek arhiwlerden esasy tapawut, aç-açan faýlyň bolmagydyr. Bu manifest, banka faýly ýerine ýetirilende işlenjek esasy synpy, synp ýoluny we köp goşmaça maglumatlary kesgitleýär. Esasy katalogda manifest.mf faýly döredeliň. Mazmuny aşakdaky ýaly bolar:

main-class: src.BoxMachine
class-path: bin/
main-classmainusuly öz içine alýan we başlangyçda ýerine ýetiriljek synpy kesgitleýär . class-path- düzülen synplara ýa-da goşmaça kitaphanalara barýan ýol. Indi banka buýrugyny ulanyp IDE bolmazdan hakyky programma gurmagyň wagty geldi:

jar -cmf manifest.mf box-machine.jar  -C bin .
-cmf- şondan soň aç-açan faýlyň ýoluny görkezmeli baýdak. manifest.mf- aç-açan ýol. box-machine.jar- çykyş bank faýlynyň ady. - jemlenen synplara barýan ýol görkezilen baýdak. .- banka faýlynyň ýerleşdiriljek ýoly. Biziň ýagdaýymyzda bu esasy katalog. Indi işe girizip bilersiňiz. Jar faýllaryny işe girizmek java buýrugy bilen hem ýerine ýetirilýär, ýöne soň baýdagy görkezmeli -jar: bu Jar faýlynyň işe girizilendigini görkezýär, ikinji argument bolsa faýlyň ýoly jar, şol sanda giňeltme :

java -jar box-machine.jar
Netije:

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-den düzmek: Gurluş ulgamlaryna syn

Buýruk setirini ulanmagyň aňsatlygyna garamazdan, ony ulanyp orta we uly taslamalary gurmak gaty kyn. Bu köp wagt alýar we dürli derejedäki ýalňyşlyklar bilen doldurylýar. Bagtymyza, iş prosesini has aňsatlaşdyrýan gurnama ulgamlary bar. Birnäçe topar bilen bu ulgam islendik çylşyrymly taslamany ýygnap biler we şeýle ulgamlaryň barlygynda döredilen pluginleriň köp bolmagy islendik kelle agyryny ýok edip biler.

Java-y nädip düzmeli?

Iň meşhur Java gurluşyk ulgamlary Ant, Maven we Gradle. Gowy ýa-da erbet zat ýok: olaryň hersi käbir meseleleri çözmek üçin döredildi. Geliň, olaryň hersine has jikme-jik seredeliň.

Garynja

Garynja, xml faýly ulanyp beýan edilen skript ulanýan gural. xml faýl gurluşy:
<?xml version="1.0"?>
<project name="NameПроекта" default="сценарийПоУмолчанию">
    <target name="NameСценария">
  //  Действия сценария
        <echo>Hello, World!</echo>
    </target>
  //  Второй сценарий
  //  И тд
</project>
Aşakdaky mazmunly esasy katalogda build.xml faýly döredeliň:
<?xml version="1.0"?>
<project name="BoxMachine" default="test">
   <target name="test">
       <echo>First build in Ant!</echo>
   </target>
</project>
Şol bir katalogda garynja buýrugyna jaň ediň:

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

test:
     [echo] First build in Ant!

BUILD SUCCESSFUL
Total time: 0 seconds
Bellik, <target>gurnama we faýl ulgamyny dolandyrmaga mümkinçilik berýän dürli meseleleri kesgitläp biler. Garynja resminamalarda görkezilen 150-den gowrak buýruk bar. Aşakdaky mysalda diňe 5 ulanýarys:
  • mkdir - kataloglary döretmek
  • delete- faýllary we kataloglary pozmak
  • javac- Java kod düzmek
  • java- düzülen kody işletmek
Simpleönekeý düzmek, gurmak ýa-da arassalamak skriptine meňzeýä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>
Scriptazgy üç hereketi suratlandyrýar - compile,, kod> işletmek we clean. compileiçindäki synplar bilen netije katalogyny döredýär, soňra döredilen kataloga sapaklary düzmek üçin javac ulanýar. rundüzülen synplary java buýrugy bilen işledýär. cleannetijeler katalogyny pozýar. Garynja buýrugyny hiç hili argumentsiz esasy katalogda işledseňiz, jemleýji hereket dowam eder. Belli bir hereket edilmeli bolsa, argumentde görkezilýär.

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 gurluşyk taslamalaryna azajyk başgaça çemeleşýär. Bu ýerde dörediji, öz gurluşyny we garynjalardan tapawutlylykda ulanýan goşmaça gurallaryny, gurluşygyň hereketleriň yzygiderliligini suratlandyrýar. Maven, garaşlylygy dolandyrmak we ähli ösüş gurşawy bilen amatly integrasiýa sebäpli döredijileriň arasynda meşhurdyr. Maven bilen işleşenimizde, aşakdaky taslama gurluşyna eýerýäris: Java-da düzmek - 3pom.xml faýlynda düzgünleri, garaşlylygy we ş.m. beýan edilýär. Adatça esasy taslama bukjasynda ýerleşýär. Maven işe başlanda, ýalňyşlyklar barada duýduryş berip, faýl gurluşyny we sintaksisini barlaýar. Esasy katalogda, bin we src bukjalarynyň gapdalynda pom.xml faýly dörediň, içine goşuň:
<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>
Ondan soň buýruk setirinde mvn buýrugyny işlediň:

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] ------------------------------------------------------------------------
Indi, jemlenen synplary öz içine alýan bin bukjasynda src bukjasy bar. “Pom.xml” -de gurmak belligi gurluşyň maksadyny - düzmegi, deslapky koduň kataloglaryny we jemleme netijeleriniň faýllaryny, şeýle hem taslamanyň adyny kesgitleýär. Maven synaglary geçirmek, Jar faýllaryny döretmek, paýlamalary gurmak we beýleki meseleler üçin dürli maksatly maksatlara we pluginlere eýe.

Gradle

Bu garynja we Maven esasly iň ýaş gurluşyk ulgamy. Esasy tapawut, meseleleriň tertibini kesgitlemek üçin asik grafik esasynda işleýär. Bu artýan we köp taslamaly gurluşlar ýaly has çylşyrymly meseleler üçin örän peýdaly. Gradle bilen gurlanda, Maven taslamasynyň bukjasynyň gurluşyna ýapyşmak hem maslahat berilýär. Theeri gelende aýtsak, Gradle-de gurmak üçin faýl build.gradle diýilýär we Maveniňkiden has kiçi görünýär. Sapaklarymyz üçin mysal:
apply plugin: 'java'
apply plugin: 'application'

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

mainClassName = "src.BoxMachine"

defaultTasks 'compileJava', 'run'
Faýl pluginleri öz içine alýar, deslapky kod faýllarynyň katalogyny kesgitleýär (eger Maven taslamasynyň gurluşy ulanylmasa), gurluşyk netijeleriniň katalogy, esasy synpyň ady we esasy meseleler. Build.gradle faýlynyň ýerleşýän bukjasyndaky gradle buýrugy gurluşygyň başlamagy üçin jogapkärdir:

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

Netije

Bir seretseň, IDE-den kod ýygnamak we ýygnamak ukyby peýdasyz bolup görünýär. Hakykatdanam, pluginler bilen amatly IDE, mümkin bolan ähli zady awtomatiki barlamak (häzirki IDE-ler IQ derejesini barlamaýar) we meşhur ulgamlar bilen integrasiýa bolanda, buýruk setirleri we Google-yň ähli buýruklary bilen näme üçin biynjalyk bolýarsyňyz? Şeýle-de bolsa, tejribe ösüş gurşawy bolmazdan kod ýygnamak we bu prosesiň her ädimine düşünmek ukybynyň gaty zerurdygyny görkezýär. Bu ussatlyk, siziň we kompaniýaňyz üçin köp nerw öýjüklerini we wagty tygşytlar. IDE-ni nädip ulanmalydygyny, ýazuw koduny öwrenmegi we elbetde Java programmirlemegiň esaslaryny şu ýerden - JavaRush-da alyp bilersiňiz. Öwrenmäge gaýdyp gelmegiň wagty :)
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION