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. Buý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:- ClassName.java atly faýlda deslapky kod bar;
- Kodda ýalňyşlyklar ýok bolsa, ol kod kody bilen düzülýär (ClassName.class faýlynda);
- Programma başlaýar.
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: Ekranyň 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 synpymyzBox
we synpymyz bar . Synp : BoxMachine
main
Box
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 main
bäş synp obýektini döredýär Box
we 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-class
main
usuly ö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 pozmakjavac
- Java kod düzmekjava
- düzülen kody işletmek
<?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
. compile
içindäki synplar bilen netije katalogyny döredýär, soňra döredilen kataloga sapaklary düzmek üçin javac ulanýar. run
düzülen synplary java buýrugy bilen işledýär. clean
netijeler 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: pom.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
GO TO FULL VERSION