JavaRush /Blog Java /Random-MS /Menyusun dalam Java

Menyusun dalam Java

Diterbitkan dalam kumpulan
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. Menyusun dalam Java - 1Keadaan 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:
  1. Terdapat kod sumber dalam fail bernama ClassName.java;
  2. Jika tiada ralat dalam kod, ia dihimpunkan ke dalam bytecode (dalam fail ClassName.class);
  3. Program bermula.
Biasanya, setiap program terkandung dalam direktori yang berasingan. Sebagai contoh mudah, mari kita bawa output ke konsol:
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: Menyusun dalam Java - 2Tangkapan 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 kelas Boxdan kelas BoxMachineyang 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 Boxdengan 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-classmenentukan kelas yang mengandungi kaedah maindan 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 jarfail, 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 direktori
  • javac- Penyusunan kod Java
  • java- menjalankan kod yang disusun
Beginilah rupa skrip kompil, binaan atau pembersihan ringkas:
<?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. compilemencipta direktori hasil dengan kelas di dalamnya, kemudian menggunakan javac untuk menyusun kelas ke dalam direktori yang dibuat. runmenjalankan kelas yang disusun dengan arahan java. cleanmemadam 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: Menyusun dalam Java - 3Peraturan 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

Kesimpulan

Pada pandangan pertama, keupayaan untuk menyusun dan memasang kod tanpa IDE nampaknya tidak berguna. Malah, mengapa perlu bersusah payah dengan baris arahan dan Google semua arahan apabila terdapat IDE yang selesa dengan pemalam, semakan automatik semua yang mungkin (IDE moden tidak menyemak tahap IQ) dan penyepaduan dengan sistem popular. Walau bagaimanapun, amalan menunjukkan bahawa keupayaan untuk memasang kod tanpa persekitaran pembangunan dan memahami setiap langkah proses ini adalah satu keperluan yang amat diperlukan. Kemahiran ini akan menjimatkan banyak sel saraf dan masa untuk anda dan syarikat anda. Anda boleh belajar cara menggunakan IDE, berlatih menulis kod, dan, sudah tentu, dapatkan asas pengaturcaraan Java di sini - di JavaRush. Masa untuk kembali belajar :)
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION