JavaRush /Blog Jawa /Random-JV /Kompilasi ing basa Jawa

Kompilasi ing basa Jawa

Diterbitake ing grup
Pemrograman ing IDE apik banget: koherensi dependensi kode, debugging sing trep, tes sing jelas, tema peteng. Dadi, thanks kanggo IDE, pangembangan berkembang kanthi cepet. Nanging dheweke santai. Saben dina, nyemplungake awake dhewe ing fungsi IDE, pangembang bakal digunakake kanggo nindakake siji tombol utawa bangunan kanthi rong klik. Kompilasi ing basa Jawa - 1Kahanan luwih elek karo sing anyar kanggo program sing makarya ing IDE saka awal, ora nggatekake karya ing baris printah. Contone, ing Intellij IDEA, kompilasi saka aplikasi Jawa dituduhake dening loading bar ing panel ngisor, lan kabeh paramèter kompilasi, Processing classpath lan ditresnani liyane urip Jawa tetep konco sing pemandangan. Disaranake ngomong babagan kompilasi ing Jawa tanpa IDE. Kanggo mbukak conto ing artikel iki, priksa manawa JDK 1.7 utawa mengko wis diinstal ing mesin.

Carane ngumpulake program?

Kompilasi ing pemrograman yaiku nyuda kode sumber dadi bytecode kanggo wiwitan program sabanjure. Urutan tumindak saka kode sumber nganti peluncuran program katon kaya iki:
  1. Ana kode sumber ing file disebut ClassName.java;
  2. Yen ora ana kasalahan ing kode, dikompilasi menyang bytecode (ing file ClassName.class);
  3. Program diwiwiti.
Biasane, saben program ana ing direktori sing kapisah. Minangka conto prasaja, ayo njupuk output menyang console:

class Test {
   public static void main(String[] args) {
      System.out.println("Это говорит приложение из командной строки");
   }
}

Apa printah javac digunakake kanggo?

Oke, titik pisanan wis rampung. Ayo dadi luwih ngerti: carane ngumpulake? :) Printah javac bakal mbantu kita babagan iki, argumen kasebut kudu nemtokake file sing dibutuhake:

javac Test.java
Yen ora ana kesalahan ing kode, file Test.class bakal katon ing jejere file Test.java. Iki minangka bytecode sing dikompilasi. Saiki kudu diluncurake. Kene kita nggunakake printah java, kang nganggo bytecode: Nyusun ing Jawa - 2Gambar nuduhake yen kita njaluk sawetara hieroglif ing output: temenan, iki enkoding rusak. Biasane iki kedadeyan ing sistem Windows. Kanggo nampilake aksara Sirilik kanthi bener ing konsol, ana prentah ing ngisor iki:

REM change CHCP to UTF-8
CHCP 65001
CLS
Padha ngganti kaca kode cangkang saiki kanggo durasi jendhela saiki. Ayo coba maneh:

D:\Java>java Test
Iki minangka aplikasi saka baris printah. Ngerti carane printah javac dianggo banget migunani, amarga printah iki basis saka sembarang project mbangun sistem.

Kompilasi lan Mlaku Multiple Classes

Kanggo nggarap macem-macem kelas sampeyan butuh classpath. Iku padha karo sistem file sing ana kelas, lan paket minangka folder. Ing wektu iki, sampeyan kudu mikir babagan misahake file kode sumber saka file sing dikompilasi. Minangka aturan, sumber kasebut ana ing direktori src, lan kelas sing dikompilasi ana ing bin. Contone, kita duwe kelas Boxlan kelas BoxMachinesing ngemot metode 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;
   }
}
Iku ing paket src lan kudu didandani. 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 iki uga ditemokake ing paket src. Ing metode kasebut main, nggawe limang obyek kelas Boxkanthi ukuran sing beda-beda lan nampilake informasi babagan kasebut menyang konsol. Kanggo ngumpulake klompok kelas iki, sampeyan kudu nggunakake perintah javac saka direktori utama (sing ngemot folder src lan bin) kanthi argumen:

javac -d bin ./src/*
-d- gendera sawise sampeyan kudu nuduhake lokasi ing ngendi kelas sing dikompilasi bakal dituju. Iki trep banget, amarga nransfer, contone, 1000 kelas minangka proses sing intensif banget. - jeneng folder. - lokasi file sumber. nuduhake yen kabeh file kudu dikompilasi. Saiki kelas sing dikompilasi katon ing folder bin. Kanggo mbukak, gunakake perintah java saka direktori sing padha, uga kanthi argumen: bin./src/**

java -classpath ./bin BoxMachine
-classpath- gendéra sawise sampeyan kudu nuduhake lokasi kelas sing dikompilasi. Jawa bakal nggoleki kelas utama lan kabeh sing ana gandhengane ing direktori iki. - jeneng folder ing ngendi kelas sing dikompilasi dumunung. - jeneng kelas utama. Kaya ing kasus sing sepisanan, ora kudu ditemtokake , amarga iki jeneng kelas, dudu file. Kesimpulan:./binBoxMachine.class

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

Nggawe File JAR

Kanggo nggawe program gampang kanggo port lan mbukak, sampeyan bisa ngumpulake kelas nyawiji menyang file jar - arsip kelas. Bentenane utama saka arsip zip utawa rar yaiku anané file nyata. Manifes iki nemtokake kelas utama sing bakal ditindakake nalika file jar dieksekusi, classpath, lan akeh informasi tambahan. Ayo nggawe file manifest.mf ing direktori utama. Isine bakal kaya ing ngisor iki:

main-class: src.BoxMachine
class-path: bin/
main-classnemtokake kelas sing ngemot cara mainlan bakal dieksekusi nalika wiwitan. - path menyang kelas kompilasi utawa perpustakaan tambahan. Saiki wektune kanggo mbangun program nyata tanpa IDE nggunakake printah jar: class-path

jar -cmf manifest.mf box-machine.jar  -C bin .
-cmf- gendera sawise sampeyan kudu nemtokake path menyang file manifest. - path kanggo manifest. - jeneng file jar output. - flag sawise kang path kanggo kelas nyawiji dituduhake. - path ngendi file jar bakal diselehake. Ing kasus kita, iki minangka direktori utama. Saiki sampeyan bisa miwiti. Bukak file jar uga rampung nggunakake printah java, nanging sampeyan kudu nemtokake gendera : nuduhake yen file Jar lagi diluncurake, lan argumen kapindho yaiku path menyang file kasebut, kalebu ekstensi : manifest.mfbox-machine.jar.-jarjar

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

Kompilasi ing Jawa tanpa IDE: Ringkesan Sistem Mbangun

Senadyan ease relatif saka nggunakake baris printah, iku banget angel kanggo mbangun proyèk medium lan gedhe nggunakake. Iki mbutuhake wektu akeh lan kebak kesalahan sing beda-beda derajat. Untunge, ana sistem perakitan sing nggawe proses kerja luwih gampang. Kanthi sawetara tim, sistem iki bisa ngumpulake proyek kanthi kerumitan apa wae, lan akeh plugin sing digawe sajrone ana sistem kasebut bisa ngilangi meh kabeh sirah.

Kepiye carane nggawe kompilasi Jawa?

Sistem mbangun Java sing paling misuwur yaiku Ant, Maven lan Gradle. Ora ana apik utawa ala: saben wong digawe kanggo ngatasi masalah tartamtu. Ayo ndeleng saben wong kanthi luwih rinci.

Semut

Ant minangka alat mbangun sing nggunakake skrip sing diterangake nggunakake file xml. Struktur file xml:

<?xml version="1.0"?>
<project name="NameПроекта" default="сценарийПоУмолчанию">
    <target name="NameСценария">
  //  Действия сценария
        <echo>Hello, World!</echo>
    </target>
  //  Второй сценарий
  //  И тд
</project>
Ayo nggawe file build.xml ing direktori utama kanthi isi ing ngisor iki:

<?xml version="1.0"?>
<project name="BoxMachine" default="test">
   <target name="test">
       <echo>First build in Ant!</echo>
   </target>
</project>
Ing direktori sing padha, nelpon printah 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
Tag kasebut <target>bisa nemtokake macem-macem tugas sing ngidini sampeyan ngatur perakitan lan sistem file. Ant wis liwat 150 printah kasedhiya, kang kadhaptar ing dokumentasi. Ing conto ing ngisor iki kita mung nggunakake 5:
  • mkdir - nggawe direktori
  • delete- mbusak file lan direktori
  • javac- Kompilasi kode Jawa
  • java- mlaku kode nyawiji
Iki kaya skrip kompilasi, mbangun, utawa ngresiki prasaja:

<?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 kasebut nggambarake telung tumindak - compile, ,code>run lan clean. nggawe direktori asil karo kelas ing, banjur nggunakake javac kanggo ngumpulake kelas menyang direktori digawe. mbukak kelas sing dikompilasi nganggo perintah java. mbusak direktori asil. Yen sampeyan mbukak perintah semut tanpa argumen ing direktori utama, tumindak kompilasi bakal ditindakake. Yen tumindak tartamtu kudu dileksanakake, wis kasebut ing argumentasi. compilerunclean

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 nawakake pendekatan sing rada beda kanggo proyek bangunan. Ing kene, pangembang luwih nggambarake proyeke lan alat tambahan sing digunakake, ora kaya Ant, ing ngendi bangunan kasebut minangka urutan tumindak. Maven misuwur ing antarane pangembang amarga manajemen ketergantungan sing gampang lan integrasi sing trep karo kabeh lingkungan pangembangan. Nalika nggarap Maven, kita netepi struktur proyek ing ngisor iki: Nyusun ing Jawa - 3Aturan mbangun, dependensi, lan liya-liyane diterangake ing file pom.xml. Biasane dumunung ing folder proyek utama. Nalika wiwitan, Maven mriksa struktur file lan sintaks, menehi peringatan babagan kesalahan. Ing direktori utama, ing jejere folder bin lan src, gawe file pom.xml, tambahake ing:

<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>
Sabanjure, jalanake perintah mvn ing baris perintah:

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] ------------------------------------------------------------------------
Saiki ana folder src ing folder bin ing ngendi ana kelas sing dikompilasi. Ing pom.xml, tag mbangun nemtokake tujuan mbangun - kompilasi, direktori kode sumber lan file asil kompilasi, uga jeneng proyek. Maven duwe macem-macem target mbangun lan plugin kanggo tes sing mlaku, nggawe file Jar, distribusi bangunan, lan tugas liyane.

Gradle

Iki minangka sistem mbangun paling enom, sing adhedhasar Ant lan Maven. Bentenane utama yaiku kerjane adhedhasar grafik asiklik kanggo nemtokake urutan tugas. Iki migunani banget kanggo tugas sing luwih rumit, kayata mbangun tambahan lan multi-proyek. Nalika mbangun karo Gradle, disaranake uga tetep ing struktur folder proyek Maven. Miturut cara, file kanggo bangunan ing Gradle diarani build.gradle lan katon luwih cilik tinimbang Maven. Tuladha kanggo kelas kita:

apply plugin: 'java'
apply plugin: 'application'

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

mainClassName = "src.BoxMachine"

defaultTasks 'compileJava', 'run'
File kasebut kalebu plugin, nemtokake direktori file kode sumber (yen struktur proyek Maven ora digunakake), direktori asil mbangun, jeneng kelas utama, lan tugas standar. Printah gradle ing direktori ing ngendi file build.gradle dumunung tanggung jawab kanggo miwiti mbangun:

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

Sepisanan, kemampuan kanggo ngumpulake lan ngumpulake kode tanpa IDE katon ora ana gunane. Pancen, kok keganggu karo baris printah lan Google kabeh printah nalika ana IDE mulyo karo plugins, otomatis mriksa kabeh bisa (IDE modern ora mriksa tingkat IQ) lan integrasi karo sistem populer. Nanging, praktik nuduhake manawa kemampuan kanggo ngumpulake kode tanpa lingkungan pangembangan lan ngerti saben langkah proses iki pancen dibutuhake. Katrampilan iki bakal ngirit akeh sel saraf lan wektu kanggo sampeyan lan perusahaan sampeyan. Sampeyan bisa sinau carane nggunakake IDE, latihan nulis kode, lan, mesthi, entuk dhasar pemrograman Java ing kene - ing JavaRush. Wektu kanggo sinau maneh :)
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION