IDE-da dasturlash juda yaxshi: kodga bog'liqliklarning uyg'unligi, qulay disk raskadrovka, aniq test, qorong'u mavzu. Shunday qilib, IDE tufayli rivojlanish sakrash va chegaralar bilan rivojlanmoqda. Ammo u dam oladi. Har kuni, IDE funksionalligiga sho'ng'igan holda, ishlab chiquvchi bitta tugma bilan ishlashga yoki ikki marta bosish bilan qurishga odatlanib qoladi. Vaziyat boshidanoq IDE-da ishlaydigan va buyruq satridagi ishlarni e'tiborsiz qoldiradigan dasturlash uchun yangi bo'lganlar bilan ancha yomonroq. Misol uchun, Intellij IDEA-da Java ilovasining kompilyatsiyasi pastki paneldagi yuklash paneli orqali namoyish etiladi va barcha kompilyatsiya parametrlari, sinf yo'lini qayta ishlash va Java hayotining boshqa zavqlari sahna ortida qoladi. Java-da IDE-siz kompilyatsiya qilish haqida gapirishni taklif qilamiz. Ushbu maqoladagi misollarni ishga tushirish uchun JDK 1.7 yoki undan keyingi versiyalari kompyuteringizda o'rnatilganligiga ishonch hosil qiling.
Dasturni qanday kompilyatsiya qilish kerak?
Dasturlashda kompilyatsiya - bu dasturni keyingi ishga tushirish uchun dastlabki kodni bayt-kodga qisqartirish. Dastlabki koddan dasturni ishga tushirishgacha bo'lgan harakatlar ketma-ketligi quyidagicha ko'rinadi:- ClassName.java deb nomlangan faylda manba kodi mavjud;
- Agar kodda xatolik bo'lmasa, u bayt-kodga kompilyatsiya qilinadi (ClassName.class faylida);
- Dastur boshlanadi.
class Test {
public static void main(String[] args) {
System.out.println("Это говорит приложение из командной строки");
}
}
Javac buyrug'i nima uchun ishlatiladi?
OK, birinchi nuqta bajarildi. Keling, tushunish uchun ko'proq boraylik: qanday kompilyatsiya qilish kerak? :) Bunda bizga javac buyrug'i yordam beradi, uning argumenti kerakli faylni ko'rsatishi kerak:
javac Test.java
Agar kodda xatolik bo'lmasa, Test.java fayli yonida Test.class fayli paydo bo'ladi. Bu kompilyatsiya qilingan bayt-kod. Endi uni ishga tushirish kerak. Bu erda biz bayt kodini ishlaydigan java buyrug'idan foydalanamiz: Skrinshotda biz chiqishda ba'zi ierogliflarni olishimizni ko'rsatadi: shubhasiz, bu buzilgan kodlash. Odatda bu Windows tizimida sodir bo'ladi. Konsolda kirill alifbosini to'g'ri ko'rsatish uchun quyidagi buyruqlar mavjud:
REM change CHCP to UTF-8
CHCP 65001
CLS
Ular joriy oynaning davomiyligi uchun joriy qobiq kod sahifasini o'zgartiradilar. Yana urinib ko'ramiz:
D:\Java>java Test
Bu dastur buyruq satridan aytadi. Javac buyrug'ining qanday ishlashini bilish juda foydali, chunki bu buyruq har qanday loyiha qurish tizimining asosi hisoblanadi.
Bir nechta sinflarni kompilyatsiya qilish va ishga tushirish
Bir nechta sinflar bilan ishlash uchun sizga sinf yo'li kerak. Bu sinflar mavjud bo'lgan fayl tizimiga o'xshaydi va paketlar papkalar vazifasini bajaradi. Shu nuqtada, dastlabki kod fayllarini kompilyatsiya qilingan fayllardan ajratish haqida o'ylash kerak. Qoida tariqasida, manbalar src katalogida, kompilyatsiya qilingan sinflar esa binda joylashgan. Misol uchun, bizda metodni o'z ichiga olgan sinfBox
va sinf mavjud . Sinf : 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;
}
}
Bu src paketida, buni tuzatish kerak. Sinf 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 sinf src paketida ham mavjud. Usulda main
u Box
turli o'lchamdagi beshta sinf ob'ektini yaratadi va ular haqidagi ma'lumotlarni konsolga ko'rsatadi. Ushbu sinflar guruhini kompilyatsiya qilish uchun siz argumentlar bilan asosiy katalogdagi (src va bin papkalarini o'z ichiga olgan) javac buyrug'idan foydalanishingiz kerak:
javac -d bin ./src/*
-d
— bayroq, shundan so'ng siz tuzilgan sinflar o'tadigan joyni ko'rsatishingiz kerak. Bu juda qulay, chunki, masalan, 1000 ta sinfni o'tkazish juda mehnat talab qiladigan jarayon. bin
- papka nomi. ./src/*
— manba fayllarning joylashuvi. *
barcha fayllar kompilyatsiya qilinishi kerakligini bildiradi. Endi kompilyatsiya qilingan sinflar bin papkasida paydo bo'ladi. Ularni ishga tushirish uchun bir xil katalogdagi java buyrug'idan, shuningdek, argumentlar bilan foydalaning:
java -classpath ./bin BoxMachine
-classpath
— bayroq, undan keyin tuzilgan sinflarning joylashuvini ko'rsatish kerak. Java ushbu katalogdagi asosiy sinfni va barcha tegishli sinflarni qidiradi. ./bin
— kompilyatsiya qilingan sinflar joylashgan papkaning nomi. BoxMachine
— asosiy sinf nomi. Birinchi holatda bo'lgani kabi, ko'rsatilmasligi kerak .class
, chunki bu fayl emas, sinf nomi. Xulosa:
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 fayllarini yaratish
Dasturni portlash va ishga tushirishni osonlashtirish uchun siz kompilyatsiya qilingan sinflarni jar fayliga - sinf arxiviga to'plashingiz mumkin. Zip yoki rar arxivlaridan asosiy farqi manifest faylining mavjudligidir. Bu manifest jar fayli bajarilganda ishga tushadigan asosiy sinfni, sinf yo'lini va ko'plab qo'shimcha ma'lumotlarni belgilaydi. Asosiy katalogda manifest.mf faylini yaratamiz. Uning mazmuni quyidagicha bo'ladi:
main-class: src.BoxMachine
class-path: bin/
main-class
usulni o'z ichiga olgan main
va ishga tushirilganda bajariladigan sinfni belgilaydi. class-path
— kompilyatsiya qilingan sinflar yoki qoʻshimcha kutubxonalarga yoʻl. Endi jar buyrug'i yordamida IDEsiz haqiqiy dasturni yaratish vaqti keldi:
jar -cmf manifest.mf box-machine.jar -C bin .
-cmf
— bayroq, undan so'ng siz manifest fayliga yo'lni ko'rsatishingiz kerak. manifest.mf
- manifestga yo'l. box-machine.jar
— chiqish jar faylining nomi. -С
— bayroq, undan keyin tuzilgan sinflarga yo'l ko'rsatiladi. .
— jar fayli joylashtiriladigan yo'l. Bizning holatda, bu asosiy katalog. Endi siz ishga tushirishingiz mumkin. Jar fayllarini ishga tushirish java buyrug'i yordamida ham amalga oshiriladi, lekin keyin siz bayroqni ko'rsatishingiz kerak -jar
: bu Jar fayli ishga tushirilayotganligini bildiradi va ikkinchi argument faylga yo'l jar
, jumladan kengaytma :
java -jar box-machine.jar
Xulosa:
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-siz kompilyatsiya qilish: Qurilish tizimlariga umumiy nuqtai
Buyruqlar qatoridan foydalanishning nisbatan qulayligiga qaramay, undan foydalangan holda o'rta va yirik loyihalarni qurish juda qiyin. Bu juda ko'p vaqtni oladi va turli darajadagi xatolar bilan to'la. Yaxshiyamki, ish jarayonini ancha osonlashtiradigan montaj tizimlari mavjud. Bir nechta jamoalar bilan ushbu tizim har qanday murakkablikdagi loyihani yig'ishi mumkin va bunday tizimlar mavjud bo'lganda yaratilgan plaginlarning ko'pligi deyarli har qanday bosh og'rig'ini bartaraf etishi mumkin.Java qanday kompilyatsiya qilinadi?
Eng mashhur Java qurish tizimlari - Ant, Maven va Gradle. Yaxshi yoki yomon yo'q: ularning har biri muayyan muammolarni hal qilish uchun yaratilgan. Keling, ularning har birini batafsil ko'rib chiqaylik.Chumoli
Ant - bu xml fayli yordamida tasvirlangan skriptdan foydalanadigan qurish vositasi. xml fayl tuzilishi:<?xml version="1.0"?>
<project name="NameПроекта" default="сценарийПоУмолчанию">
<target name="NameСценария">
// Действия сценария
<echo>Hello, World!</echo>
</target>
// Второй сценарий
// И тд
</project>
Keling, asosiy katalogda quyidagi tarkibga ega build.xml faylini yarataylik:
<?xml version="1.0"?>
<project name="BoxMachine" default="test">
<target name="test">
<echo>First build in Ant!</echo>
</target>
</project>
Xuddi shu katalogda chumoli buyrug'ini chaqiring:
D:\Java>D:\Temp\ant\bin\ant
Buildfile: D:\Java\build.xml
test:
[echo] First build in Ant!
BUILD SUCCESSFUL
Total time: 0 seconds
Teg <target>
montaj va fayl tizimini boshqarish imkonini beruvchi turli vazifalarni belgilashi mumkin. Ant-da 150 dan ortiq buyruqlar mavjud bo'lib, ular hujjatlarda keltirilgan. Quyidagi misolda biz faqat 5 tadan foydalanamiz:
mkdir - kataloglarni yaratish delete
- fayllar va kataloglarni o'chirishjavac
- Java kodini kompilyatsiya qilishjava
- kompilyatsiya qilingan kodni ishga tushirish
<?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 uchta amalni tasvirlaydi - compile
, ,code>run va clean
. compile
sinflar bilan natija katalogini yaratadi, so'ngra yaratilgan katalogga sinflarni kompilyatsiya qilish uchun javac dan foydalanadi. run
java buyrug'i bilan kompilyatsiya qilingan sinflarni ishga tushiradi. clean
natijalar katalogini o'chiradi. Agar asosiy katalogda argumentlarsiz chumoli buyrug'ini bajarsangiz, kompilyatsiya amali bajariladi. Agar muayyan harakatni bajarish kerak bo'lsa, u argumentda ko'rsatiladi.
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 loyihalarni qurishda biroz boshqacha yondashuvni taklif qiladi. Bu erda ishlab chiquvchi Antdan farqli o'laroq, o'z loyihasini va u foydalanadigan qo'shimcha vositalarni tasvirlaydi, bu erda qurilish harakatlar ketma-ketligidir. Maven o'zining oson bog'liqligini boshqarish va barcha ishlab chiqish muhitlari bilan qulay integratsiyalashuvi tufayli ishlab chiquvchilar orasida mashhurdir. Maven bilan ishlashda biz quyidagi loyiha tuzilishiga amal qilamiz: Qurilish qoidalari, bog'liqliklar va boshqalar pom.xml faylida tasvirlangan. Odatda u asosiy loyiha papkasida joylashgan. Ishga tushganda, Maven fayl tuzilishi va sintaksisini tekshiradi va sizni xatolar haqida ogohlantiradi. Asosiy katalogda bin va src papkalari yonida pom.xml faylini yarating, ichiga qo'shing:<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>
Keyin buyruq satrida mvn buyrug'ini ishga tushiring:
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] ------------------------------------------------------------------------
Endi bin papkasida kompilyatsiya qilingan sinflarni o'z ichiga olgan src papkasi mavjud. Pom.xml da qurish yorlig'i qurish maqsadini belgilaydi - kompilyatsiya, manba kodining kataloglari va kompilyatsiya natijalari fayllari, shuningdek, loyiha nomi. Maven-da testlarni bajarish, Jar fayllarini yaratish, tarqatishlarni yaratish va boshqa vazifalar uchun turli xil qurish maqsadlari va plaginlari mavjud.
Gradle
Bu Ant va Mavenga asoslangan eng yosh qurilish tizimi. Asosiy farq shundaki, u vazifalar tartibini aniqlash uchun asiklik grafik asosida ishlaydi. Bu qo'shimcha va ko'p loyihani qurish kabi murakkabroq vazifalar uchun juda foydali. Gradle bilan qurishda, shuningdek, Maven loyihasi papkasi tuzilishiga yopishib olish tavsiya etiladi. Aytgancha, Gradleda qurish fayli build.gradle deb ataladi va Maven faylidan ancha kichikroq ko'rinadi. Sinflarimiz uchun misol:apply plugin: 'java'
apply plugin: 'application'
sourceSets {
main {
java {
srcDirs 'src'
}
}
}
sourceSets.main.output.classesDir = file("bin")
mainClassName = "src.BoxMachine"
defaultTasks 'compileJava', 'run'
Fayl plaginlarni o'z ichiga oladi, manba kodi fayllari katalogini (agar Maven loyihasi tuzilmasi ishlatilmasa), qurish natijalari katalogini, asosiy sinf nomini va standart vazifalarni belgilaydi. build.gradle fayli joylashgan katalogdagi gradle buyrug'i qurilishni boshlash uchun javobgardir:
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