Pengaturcaraan dalam IDE adalah hebat: koheren kebergantungan kod, penyahpepijatan yang mudah, ujian yang jelas, tema gelap. Oleh itu, terima kasih kepada IDE, pembangunan sedang berkembang pesat. Tetapi dia berehat. Setiap hari, melibatkan diri dalam fungsi IDE, pembangun membiasakan diri untuk melakukan dengan satu butang atau membina dengan dua klik. Keadaan ini lebih teruk dengan mereka yang baru dalam pengaturcaraan yang bekerja dalam IDE dari awal lagi, mengabaikan kerja pada baris arahan. Sebagai contoh, dalam Intellij IDEA, kompilasi aplikasi Java ditunjukkan oleh bar pemuatan di panel bawah, dan semua parameter kompilasi, pemprosesan laluan kelas dan keseronokan lain dalam kehidupan Java kekal di belakang tabir. Kami cadangkan bercakap tentang menyusun dalam Java tanpa IDE. Untuk menjalankan contoh dalam artikel ini, pastikan JDK 1.7 atau lebih baru dipasang pada mesin anda.
Bagaimana untuk menyusun atur cara?
Penyusunan dalam pengaturcaraan ialah pengurangan kod sumber kepada kod bait untuk permulaan program seterusnya. Urutan tindakan dari kod sumber ke pelancaran program kelihatan seperti ini:- Terdapat kod sumber dalam fail bernama ClassName.java;
- Jika tiada ralat dalam kod, ia dihimpunkan ke dalam bytecode (dalam fail ClassName.class);
- Program bermula.
class Test {
public static void main(String[] args) {
System.out.println("Это говорит приложение из командной строки");
}
}
Apakah arahan javac yang digunakan?
Okay, point pertama dah selesai. Mari kita pergi lebih jauh untuk memahami: bagaimana untuk menyusun? :) Perintah javac akan membantu kami dengan ini, hujah yang mesti menentukan fail yang diperlukan:
javac Test.java
Jika tiada ralat dalam kod, fail Test.class akan muncul di sebelah fail Test.java. Ini ialah kod bait yang disusun. Kini ia perlu dilancarkan. Di sini kami menggunakan arahan java, yang menjalankan kod bait: Tangkapan skrin menunjukkan bahawa kami mendapat beberapa hieroglif dalam output: jelas sekali, ini pengekodan yang rosak. Biasanya ini berlaku pada sistem Windows. Untuk memaparkan abjad Cyrillic dengan betul dalam konsol, terdapat arahan berikut:
REM change CHCP to UTF-8
CHCP 65001
CLS
Mereka menukar halaman kod shell semasa untuk tempoh tetingkap semasa. Mari cuba lagi:
D:\Java>java Test
Inilah yang dikatakan oleh aplikasi dari baris arahan. Mengetahui cara arahan javac berfungsi sangat berguna, kerana arahan ini adalah asas bagi mana-mana sistem binaan projek.
Menyusun dan Menjalankan Pelbagai Kelas
Untuk bekerja dengan berbilang kelas, anda memerlukan classpath. Ia serupa dengan sistem fail di mana kelas terkandung, dan pakej bertindak sebagai folder. Pada ketika ini, ia patut difikirkan tentang memisahkan fail kod sumber daripada fail yang disusun. Sebagai peraturan, sumber terletak dalam direktori src, dan kelas yang disusun berada dalam bin. Sebagai contoh, kami mempunyai kelasBox
dan kelas BoxMachine
yang mengandungi kaedah main
. kelas Box
:
package src;
public class Box {
private double size;
public Box(double size) {
this.size = size;
}
public String toString() {
return "Box have size " + size;
}
}
Ia berada dalam pakej src dan perlu diperbaiki. kelas 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));
}
}
}
Kelas ini juga terdapat dalam pakej src. Dalam kaedah main
, ia mencipta lima objek kelas Box
dengan saiz yang berbeza dan memaparkan maklumat tentangnya ke konsol. Untuk menyusun kumpulan kelas ini, anda perlu menggunakan arahan javac dari direktori utama (yang mengandungi folder src dan bin) dengan hujah:
javac -d bin ./src/*
-d
— bendera selepas itu anda harus menunjukkan lokasi di mana kelas yang disusun akan pergi. Ini sangat mudah, kerana pemindahan, sebagai contoh, 1000 kelas adalah proses yang sangat intensif buruh. bin
- nama folder. ./src/*
— lokasi fail sumber. *
menunjukkan bahawa semua fail mesti disusun. Sekarang kelas yang disusun muncul dalam folder bin. Untuk menjalankannya, gunakan arahan java dari direktori yang sama, juga dengan argumen:
java -classpath ./bin BoxMachine
-classpath
— bendera selepas itu anda harus menunjukkan lokasi kelas yang disusun. Java akan mencari kelas utama dan semua yang berkaitan dalam direktori ini. ./bin
— nama folder di mana kelas yang disusun berada. BoxMachine
- nama kelas utama. Seperti dalam kes pertama, tidak boleh dinyatakan .class
, kerana ini adalah nama kelas, bukan fail. Kesimpulan:
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
Mencipta Fail JAR
Untuk menjadikan program mudah dipindahkan dan dijalankan, anda boleh mengumpul kelas yang disusun ke dalam fail balang - arkib kelas. Perbezaan utama dari arkib zip atau rar ialah kehadiran fail manifes. Manifes ini menentukan kelas utama yang akan dijalankan apabila fail jar dilaksanakan, laluan kelas dan banyak maklumat tambahan. Mari buat fail manifest.mf dalam direktori utama. Kandungannya adalah seperti berikut:
main-class: src.BoxMachine
class-path: bin/
main-class
menentukan kelas yang mengandungi kaedah main
dan akan dilaksanakan pada permulaan. class-path
— laluan ke kelas terkumpul atau perpustakaan tambahan. Kini tiba masanya untuk membina program sebenar tanpa IDE menggunakan arahan jar:
jar -cmf manifest.mf box-machine.jar -C bin .
-cmf
— bendera selepas itu anda harus menentukan laluan ke fail manifes. manifest.mf
- laluan ke manifes. box-machine.jar
— nama fail balang output. -С
— bendera selepas itu laluan ke kelas yang disusun ditunjukkan. .
— laluan di mana fail jar akan diletakkan. Dalam kes kami, ini adalah direktori utama. Kini anda boleh melancarkan. Pelancaran fail jar juga dilakukan menggunakan arahan java, tetapi kemudian anda perlu menentukan bendera -jar
: ia menunjukkan bahawa fail Jar sedang dilancarkan, dan hujah kedua ialah laluan ke jar
fail, termasuk sambungan :
java -jar box-machine.jar
Kesimpulan:
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
Menyusun dalam Java tanpa IDE: Gambaran Keseluruhan Sistem Binaan
Walaupun relatif mudah digunakan baris arahan, sangat sukar untuk membina projek sederhana dan besar menggunakannya. Ini mengambil banyak masa dan penuh dengan ralat dalam pelbagai peringkat. Nasib baik, terdapat sistem pemasangan yang menjadikan proses kerja lebih mudah. Dengan beberapa pasukan, sistem ini boleh memasang projek dengan apa-apa kerumitan, dan banyak pemalam yang dicipta semasa kewujudan sistem sedemikian boleh menghilangkan hampir semua sakit kepala.Bagaimana untuk menyusun Java?
Sistem binaan Java yang paling terkenal ialah Ant, Maven dan Gradle. Tidak ada baik atau buruk: setiap daripada mereka dicipta untuk menyelesaikan masalah tertentu. Mari kita lihat setiap daripada mereka dengan lebih terperinci.Semut
Ant ialah alat binaan yang menggunakan skrip yang diterangkan menggunakan fail xml. struktur fail xml:<?xml version="1.0"?>
<project name="NameПроекта" default="сценарийПоУмолчанию">
<target name="NameСценария">
// Действия сценария
<echo>Hello, World!</echo>
</target>
// Второй сценарий
// И тд
</project>
Mari buat fail build.xml dalam direktori utama dengan kandungan berikut:
<?xml version="1.0"?>
<project name="BoxMachine" default="test">
<target name="test">
<echo>First build in Ant!</echo>
</target>
</project>
Dalam direktori yang sama, panggil arahan semut:
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>
boleh menentukan pelbagai tugas yang membolehkan anda mengurus pemasangan dan sistem fail. Ant mempunyai lebih 150 arahan yang tersedia, yang disenaraikan dalam dokumentasi. Dalam contoh di bawah kami hanya menggunakan 5:
mkdir - mencipta direktori delete
- memadam fail dan direktorijavac
- Penyusunan kod Javajava
- menjalankan kod yang disusun
<?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>
Skrip menerangkan tiga tindakan - compile
, ,code>run dan clean
. compile
mencipta direktori hasil dengan kelas di dalamnya, kemudian menggunakan javac untuk menyusun kelas ke dalam direktori yang dibuat. run
menjalankan kelas yang disusun dengan arahan java. clean
memadam direktori hasil. Jika anda menjalankan arahan semut tanpa hujah dalam direktori utama, tindakan penyusunan akan dijalankan. Jika tindakan tertentu perlu dilakukan, ia dinyatakan dalam hujah.
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 menawarkan pendekatan yang sedikit berbeza untuk membina projek. Di sini, pembangun lebih menggambarkan projeknya dan alat tambahan yang digunakannya, tidak seperti Ant, di mana binaan ialah urutan tindakan. Maven popular di kalangan pembangun kerana pengurusan pergantungan yang mudah dan penyepaduan yang mudah dengan semua persekitaran pembangunan. Apabila bekerja dengan Maven, kami mematuhi struktur projek berikut: Peraturan binaan, kebergantungan, dsb. diterangkan dalam fail pom.xml. Biasanya ia terletak dalam folder projek utama. Pada permulaan, Maven menyemak struktur fail dan sintaks, memberi amaran kepada anda tentang ralat. Dalam direktori utama, di sebelah folder bin dan src, buat fail pom.xml, tambahkan di dalam:<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>
Seterusnya, jalankan arahan mvn pada baris arahan:
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] ------------------------------------------------------------------------
Sekarang terdapat folder src dalam folder bin di mana kelas yang disusun berada. Dalam pom.xml, teg binaan mentakrifkan tujuan binaan - kompilasi, direktori kod sumber dan fail hasil kompilasi, serta nama projek. Maven mempunyai pelbagai sasaran binaan dan pemalam untuk menjalankan ujian, mencipta fail Jar, membina pengedaran dan tugasan lain.
Gradle
Ini adalah sistem binaan termuda, yang berasaskan Ant dan Maven. Perbezaan utama ialah ia berfungsi berdasarkan graf akiklik untuk menentukan susunan tugasan. Ini sangat berguna untuk tugas yang lebih kompleks, seperti binaan tambahan dan berbilang projek. Apabila membina dengan Gradle, ia juga disyorkan untuk berpegang pada struktur folder projek Maven. By the way, fail untuk membina dalam Gradle dipanggil build.gradle dan kelihatan jauh lebih kecil daripada Maven. Contoh untuk kelas kami:apply plugin: 'java'
apply plugin: 'application'
sourceSets {
main {
java {
srcDirs 'src'
}
}
}
sourceSets.main.output.classesDir = file("bin")
mainClassName = "src.BoxMachine"
defaultTasks 'compileJava', 'run'
Fail itu mengandungi pemalam, takrifan direktori fail kod sumber (jika struktur projek Maven tidak digunakan), direktori hasil binaan, nama kelas utama dan tugas lalai. Perintah gradle dalam direktori di mana fail build.gradle terletak bertanggungjawab untuk memulakan binaan:
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