JavaRush /Блоги Java /Random-TG /Тартиб додан дар Java

Тартиб додан дар Java

Дар гурӯҳ нашр шудааст
Барномасозӣ дар IDE олиҷаноб аст: ҳамоҳангии вобастагии code, ислоҳи муносиб, санҷиши равшан, мавзӯи торик. Ҳамин тавр, ба шарофати IDE, рушд бо ҷаҳишҳо ва ҳудудҳо инкишоф меёбад. Аммо вай истироҳат мекунад. Ҳар рӯз, ки ба функсияҳои IDE ғарқ шуда, таҳиякунанда одат мекунад, ки бо як тугма иҷро кунад ё бо ду клик созад. Тартиб додан дар Java - 1Вазъият бо онҳое, ки дар барномасозӣ нав ҳастанд, ки аз аввал дар IDE кор мекунанд ва кор дар сатри фармонро сарфи назар мекунанд, хеле бадтар аст. Масалан, дар Intellij IDEA, тартиб додани барномаи Java тавассути сатри боркунӣ дар панели поён нишон дода мешавад ва ҳама параметрҳои компиляция, коркарди роҳи синф ва дигар лаззатҳои ҳаёти Java дар паси парда боқӣ мемонанд. Мо пешниҳод мекунем, ки дар бораи тартиб додани Java бе IDE сӯҳбат кунем. Барои иҷро кардани мисолҳои ин мақола, боварӣ ҳосил кунед, ки JDK 1.7 ё дертар дар мошини шумо насб шудааст.

Барномаро чӣ гуна бояд тартиб дод?

Компиляция дар барномасозӣ ин кам кардани codeи ибтидоӣ ба bytecode барои оғози минбаъдаи барнома мебошад. Пайдарпайии амалҳо аз рамзи сарчашма то оғози барнома чунин аст:
  1. Дар файле бо номи ClassName.java рамзи сарчашма мавҷуд аст;
  2. Агар дар code ягон хатогӣ мавҷуд набошад, он ба byte code тартиб дода мешавад (дар файли ClassName.class);
  3. Барнома оғоз мешавад.
Одатан, ҳар як барнома дар феҳристи алоҳида ҷойгир аст. Ҳамчун мисоли оддӣ, биёед натиҷаро ба консол гирем:
class Test {
   public static void main(String[] args) {
      System.out.println("Это говорит приложение из командной строки");
   }
}

Фармони javac барои чӣ истифода мешавад?

Хуб, нуқтаи аввал иҷро шуд. Биёед минбаъд барои фаҳмидани: чӣ тавр тартиб? :) Дар ин кор фармони javac ба мо кӯмак мекунад, ки аргументи он бояд файли лозимиро нишон диҳад:

javac Test.java
Агар дар code ягон хатогӣ мавҷуд набошад, дар паҳлӯи файли Test.java файли Test.class пайдо мешавад. Ин bytecodeи тартибдодашуда аст. Акнун онро ба кор андохтан лозим аст. Дар ин ҷо мо фармони java-ро истифода мебарем, ки byte-codeро иҷро мекунад: Тартиб додан дар Java - 2Намудори скриншот нишон медиҳад, ки мо дар натиҷа баъзе иероглифҳо мегирем: баръало, ин рамзгузории шикаста аст. Одатан, ин дар системаи Windows рӯй медиҳад. Барои дуруст нишон додани алифбои кириллӣ дар консол, фармонҳои зерин мавҷуданд:

REM change CHCP to UTF-8
CHCP 65001
CLS
Онҳо саҳифаи рамзи ҷараёнро барои давомнокии равзанаи ҷорӣ иваз мекунанд. Биёед бори дигар кӯшиш кунем:

D:\Java>java Test
Ин аст он чизе ки барнома аз сатри фармон мегӯяд. Донистани чӣ гуна кор кардани фармони javac хеле муфид аст, зеро ин фармон асоси ҳама гуна системаи сохтани лоиҳа мебошад.

Тартиб додан ва иҷро кардани синфҳои сершумор

Барои кор бо синфҳои сершумор ба шумо як роҳи синф лозим аст. Он ба системаи файлие монанд аст, ки дар он синфҳо мавҷуданд ва бастаҳо ҳамчун ҷузвдонҳо амал мекунанд. Дар ин лаҳза, дар бораи ҷудо кардани файлҳои codeи ибтидоӣ аз файлҳои тартибдодашуда фикр кардан лозим аст. Чун қоида, манбаъҳо дар директорияи src ҷойгиранд ва синфҳои тартибдодашуда дар бин ҷойгиранд. Масалан, мо синф Boxва синф дорем 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 аст, ин бояд ислоҳ карда шавад. Синф 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));
       }
   }
}
Ин синф инчунин дар бастаи src пайдо мешавад. Дар усули main, он панҷ an objectи синфии Boxандозаҳои гуногунро эҷод мекунад ва маълумотро дар бораи онҳо ба консол намоиш медиҳад. Барои тартиб додани ин гурӯҳи синфҳо, шумо бояд фармони javac-ро аз директорияи асосӣ (ки дорои ҷузвдонҳои src ва bin) бо далелҳо истифода баред:

javac -d bin ./src/*
-d— парчам, ки пас аз он шумо бояд макони ба куҷо рафтани синфҳои тартибдодашударо нишон диҳед. Ин хеле қулай аст, зеро интиқол, масалан, 1000 синф як раванди хеле меҳнатталаб аст. bin— номи папка. ./src/*— ҷойгиршавии файлҳои манбаъ. *нишон медиҳад, ки ҳамаи файлҳо бояд тартиб дода шаванд. Акнун синфҳои тартибдодашуда дар папкаи бин пайдо мешаванд. Барои иҷро кардани онҳо, фармони javaро аз ҳамон директория, инчунин бо далелҳо истифода баред:

java -classpath ./bin BoxMachine
-classpath— байрақчае, ки пас аз он шумо бояд ҷойгиршавии синфҳои тартибдодашударо нишон диҳед. Java дар ин феҳрист синфи асосӣ ва ҳама синфҳои алоқамандро ҷустуҷӯ мекунад. ./bin— номи папкае, ки дар он синфхои тартибдодашуда чойгиранд. BoxMachine— номи синфи асосй. Тавре ки дар ҳолати аввал, набояд муайян карда шавад .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

Эҷоди файлҳои JAR

Барои осон кардани интиқол ва иҷро кардани барнома, шумо метавонед синфҳои тартибдодашударо дар файли jar - архиви синф ҷамъ кунед. Фарқи асосӣ аз архивҳои zip ё rar мавҷудияти файли манифест мебошад. Ин манифест синфи асосиеро, ки ҳангоми иҷро шудани файли jar иҷро мешавад, роҳи синф ва маълумоти зиёди иловагиро муайян мекунад. Биёед дар директорияи асосӣ файли manifest.mf эҷод кунем. Мундариҷаи он чунин хоҳад буд:

main-class: src.BoxMachine
class-path: bin/
main-classсинферо муайян мекунад, ки методро дар бар мегирад mainва ҳангоми оғозёбӣ иҷро карда мешавад. class-path— роҳ ба синфҳои тартибдодашуда ё китобхонаҳои иловагӣ. Ҳоло вақти он расидааст, ки барномаи воқеиро бидуни IDE бо истифода аз фармони jar созем:

jar -cmf manifest.mf box-machine.jar  -C bin .
-cmf— парчам, ки пас аз он шумо бояд роҳро ба файли манифест муайян кунед. manifest.mf— рох ба суи манифест. box-machine.jar— номи файли jar баромад. — байрақе, ки пас аз он роҳ ба синфҳои тартибдодашуда нишон дода мешавад. .— роҳе, ки дар он файли jar ҷойгир карда мешавад. Дар ҳолати мо, ин каталоги асосӣ аст. Акнун шумо метавонед оғоз кунед. Оғози файлҳои jar инчунин бо истифода аз фармони java анҷом дода мешавад, аммо пас шумо бояд парчамро муайян кунед -jar: ин нишон медиҳад, ки файли Jar оғоз карда мешавад ва далели дуюм роҳи jarфайл аст, аз ҷумла тамдид :

java -jar box-machine.jar
Хулоса:

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 бе IDE: Шарҳи системаҳои сохтмон

Сарфи назар аз осонии нисбии истифодаи сатри фармон, сохтани лоиҳаҳои миёна ва калон бо истифода аз он хеле душвор аст. Ин вақти зиёдро мегирад ва бо хатогиҳои дараҷаҳои гуногун пур мешавад. Хушбахтона, системаҳои васлкунӣ мавҷуданд, ки раванди корро хеле осон мекунанд. Бо якчанд даста, ин система метавонад лоиҳаи ҳар гуна мураккабиро ҷамъоварӣ кунад ва фаровонии плагинҳо, ки дар давоми мавҷудияти чунин системаҳо сохта шудаанд, қариб ҳама дарди сарро бартараф карда метавонанд.

Java-ро чӣ гуна бояд тартиб дод?

Машҳуртарин системаҳои сохтани Java Ant, Maven ва Gradle мебошанд. Хуб ё бад нест: ҳар кадоми онҳо барои ҳалли мушкилоти муайян офарида шудаанд. Биёед ба ҳар яки онҳо муфассалтар назар кунем.

Мӯрча

Ant як асбоби сохтанист, ки скрипти бо истифода аз файли xml тавсифшударо истифода мебарад. Сохтори файли xml:
<?xml version="1.0"?>
<project name="NameПроекта" default="сценарийПоУмолчанию">
    <target name="NameСценария">
  //  Действия сценария
        <echo>Hello, World!</echo>
    </target>
  //  Второй сценарий
  //  И тд
</project>
Биёед дар директорияи асосӣ файли build.xml бо мундариҷаи зерин эҷод кунем:
<?xml version="1.0"?>
<project name="BoxMachine" default="test">
   <target name="test">
       <echo>First build in Ant!</echo>
   </target>
</project>
Дар ҳамон феҳрист фармони мӯрчаро даъват кунед:

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 <target>метавонад вазифаҳои гуногунро муайян кунад, ки ба шумо имкон медиҳанд, ки ассамблея ва системаи файлиро идора кунед. Ант зиёда аз 150 фармон дорад, ки дар ҳуҷҷатҳо номбар шудаанд. Дар мисоли зер мо танҳо 5-ро истифода мебарем:
  • mkdir - сохтани директорияҳо
  • delete- нест кардани файлҳо ва директорияҳо
  • javac- Ҷамъоварии codeи Java
  • java- иҷро кардани рамзи тартибдодашуда
Скрипти оддии компилясия, сохтан ё тозакунӣ чунин аст:
<?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>
Скрипт се амалро тавсиф мекунад - compile, ,code>run ва clean. compileфеҳристи натиҷаҳоро бо синфҳо дар он эҷод мекунад ва сипас javac-ро барои тартиб додани синфҳо ба директорияи сохташуда истифода мебарад. runсинфҳои тартибдодашударо бо фармони java иҷро мекунад. cleanдиректорияи натиҷаҳоро нест мекунад. Агар шумо фармони мӯрчаро бе далелҳо дар директорияи асосӣ иҷро кунед, амали компиляция иҷро мешавад. Агар амали мушаххасро иҷро кардан лозим бошад, он дар аргумент нишон дода мешавад.

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 бо сабаби идоракунии осони вобастагӣ ва ҳамгироии қулай бо ҳама муҳитҳои рушд дар байни таҳиягарон маъмул аст. Ҳангоми кор бо Maven, мо ба сохтори лоиҳаи зерин риоя мекунем: Тартиб додан дар Java - 3Қоидаҳои созанда, вобастагӣ ва ғайра дар файли pom.xml тасвир шудаанд. Одатан он дар папкаи асосии лоиҳа ҷойгир аст. Ҳангоми оғозёбӣ, Maven сохтор ва синтаксиси файлро тафтиш карда, шуморо дар бораи хатогиҳо огоҳ мекунад. Дар феҳристи асосӣ, дар паҳлӯи ҷузвдонҳои bin ва src, файли pom.xml эҷод кунед ва дар дохor он илова кунед:
<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>
Баъдан, фармони mvn -ро дар сатри фармон иҷро кунед:

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] ------------------------------------------------------------------------
Ҳоло дар папкаи bin папкаи src мавҷуд аст, ки дар он синфҳои тартибдодашуда мавҷуданд. Дар pom.xml, теги сохтмон ҳадафи сохтмон - компиляция, директорияҳои codeи сарчашма ва файлҳои натиҷа, инчунин номи лоиҳаро муайян мекунад. Maven дорои як қатор ҳадафҳо ва плагинҳо барои санҷишҳо, сохтани файлҳои Jar, сохтани тақсимот ва дигар вазифаҳо мебошад.

Градл

Ин ҷавонтарин системаи сохтмон аст, ки ба Ant ва Maven асос ёфтааст. Фарқияти асосӣ дар он аст, ки он дар асоси графики ациклӣ барои муайян кардани тартиби вазифаҳо кор мекунад. Ин барои вазифаҳои мураккабтар, ба монанди сохтани афзоянда ва бисёр лоиҳаҳо хеле муфид аст. Ҳангоми сохтани Gradle, инчунин тавсия дода мешавад, ки ба сохтори ҷузвдони лоиҳаи Maven пайваст шавед. Дар омади гап, файли сохтан дар Gradle build.gradle номида мешавад ва назар ба файли Maven хеле хурдтар менамояд. Намунаи дарсҳои мо:
apply plugin: 'java'
apply plugin: 'application'

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

mainClassName = "src.BoxMachine"

defaultTasks 'compileJava', 'run'
Файл плагинҳоро дар бар мегирад, директорияи файлҳои codeи ибтидоиро муайян мекунад (агар сохтори лоиҳаи Maven истифода нашавад), директорияи натиҷаҳои сохтмон, номи синфи асосӣ ва вазифаҳои пешфарз. Фармони gradle дар директорияе, ки дар он файли build.gradle ҷойгир аст, барои оғоз кардани сохтмон масъул аст:

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

Хулоса

Дар назари аввал, қобorяти тартиб додан ва ҷамъ кардани code бе IDE бефоида менамояд. Воқеан, чаро бо сатрҳои фармон ва Google ҳама фармонҳоро ташвиш медиҳед, вақте ки IDE бароҳат бо плагинҳо, худкор тафтиши ҳама чиз имконпазир аст (IDE-ҳои муосир сатҳи IQ-ро тафтиш намекунанд) ва ҳамгироӣ бо системаҳои маъмул. Аммо, амалия нишон медиҳад, ки қобorяти ҷамъ кардани code бидуни муҳити рушд ва дарки ҳар як қадами ин раванд як зарурати шадид аст. Ин маҳорат барои шумо ва ширкати шумо бисёр ҳуҷайраҳои асаб ва вақтро сарфа мекунад. Шумо метавонед тарзи истифодаи IDE, машқ кардани codeи навиштан ва албатта асосҳои барномасозии Java-ро дар ин ҷо - дар JavaRush омӯзед. Вақти бозгашт ба омӯзиш :)
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION