JavaRush /Блоги Java /Random-TG /Тартиб додан ва иҷро кардани Java бе IDE
Ve4niY
Сатҳи

Тартиб додан ва иҷро кардани Java бе IDE

Дар гурӯҳ нашр шудааст
Дар як вақт дар reddit.com , дар мавзӯи Тартиб додан ва кор кардани Java бе IDE , савол дода шуд: Оё фармоне ҳаст, ки як гурӯҳи файлҳои Java-ро, ки дар дохor баста ҷойгиранд, ба ҷузвдони алоҳида ҷамъоварӣ мекунад (биёед, онро bin номида ). , ва ман чӣ гуна метавонам файлҳои нави синфро оғоз кунам? " Тартиб додан ва иҷро кардани Java бе IDE - 1Муаллифи мавзӯъ, kylolink , мефаҳмонад: "Вақте ки ман истифодаи Java-ро оғоз кардам, ман ба Eclipse такя мекардам, то ҳама тартибро барои ман анҷом диҳад ва танҳо дар бораи навиштани code хавотир будам." Ман ин саволро борҳо дида будам ва воқеан ҳам ин саволро дидаам. Он чизест, ки маро водор кард, ки системаҳои GPS ва IDE-ро дар блоги худ интишор кунам: хуб ё бад?Ман IDE-ҳои пурқудрати муосири Java-ро дӯст медорам ва онҳо ҳаёти маро ҳамарӯза осонтар мекунанд, аммо донистани он ки чӣ тавр сохтани мисолҳои оддии Java бе истифода аз онҳо фоидаҳо дорад. Ин мақола дар бораи чӣ гуна иҷро кардани ин кор аст. Дар блоги худ оид ба омӯзиши Java бо санҷишҳои оддӣ, ман дар бораи он навишта будам, ки чӣ тавр ман баъзан дӯст медорам, ки муҳаррири оддии матн ва асбобҳои сатри фармонро барои навиштан, сохтан ва иҷро кардани барномаҳои оддӣ истифода барам. Ҳоло як фикри хеле хуб дар бораи он, ки IDE-ҳои Java-и дӯстдоштаи ман то чӣ андоза "сари изофа" талаб мекунанд ва қарори барвақт қабул кунед, ки оё манфиатҳои тавассути истифодаи чаҳорчӯба бадастомада барои сафед кардани "сари изофӣ" кофӣ ҳастанд. Дар аксари барномаҳои воқеӣ, ҳеҷ шакке нест, ки VL IDE арзиши зиёде дорад. Аммо, барои мисолҳои оддитарин, ин на ҳамеша чунин аст. Қисми боқимондаи ин паём нишон медиҳад, ки чӣ гуна codeи Java-ро бидуни IDE барои ин ҳолатҳо сохтан ва иҷро кардан мумкин аст.

Навиштан ва иҷро кардани codeи Java

Барои равшантар кардани мисол, ман якчанд синфҳои хеле соддаи Java-ро истифода мебарам, ки бо ҳам тавассути таркиб ё мерос алоқаманданд ва дар як бастаи dustin.examples ном доранд . Дар ду синф функсия мавҷуд нест main; синфи сеюм, Main.java, дорои функсияест main, ки ба шумо имкон медиҳад, ки чӣ гуна идора кардани синфро бе IDE нишон диҳед. Дар зер рамзи ин се синф оварда шудааст: Parent.java
package dustin.examples;

public class Parent
{
   @Override
   public String toString()
   {
      return "I'm the Parent.";
   }
}
Child.java
package dustin.examples;

public class Child extends Parent
{
   @Override
   public String toString()
   {
      return "I'm the Child.";
   }
}
Main.java
package dustin.examples;

import static java.lang.System.out;

public class Main
{
   private final Parent parent = new Parent();
   private final Child child = new Child();

   public static void main(final String[] arguments)
   {
      final Main instance = new Main();
      out.println(instance.parent);
      out.println(instance.child);
   }
}
Намоиши зерин сохтори директорияро бо ин синфҳои .java нишон медиҳад . Намуди скриншот нишон медиҳад, ки файлҳои манбаъ дар иерархияи директория ҷойгиранд, ки номи бастаро намояндагӣ мекунанд ( dustin/examples , зеро маълумоти баста dustin.examples аст ) ва ин бастаи иерархияи директорияро инъикос мекунад. дар зери зеркаталоги SRC ҷойгир аст. Ман инчунин зеркаталоги синфҳоро (ки айни ҳол холӣ аст) барои ҷойгир кардани файлҳои .class тартибдодашуда сохтам , то Javac ин директорияро ҳангоми мавҷуд набудани он эҷод накунад.

Сохтани JAVAC ва кор бо Java

Новобаста аз он ки кадом равиш барои сохтани codeи Java (Ant, Maven, Gradle ё IDE) истифода мешавад, он дар ниҳоят ба JAVAC меояд. Вариантҳои стандартӣ дар Oracle/Sun асбоби сатри фармони JAVAC-ро тавассути иҷро кардани JAVAC -help ва имконоти иловагии васеъро тавассути иҷро кардани JAVAC -help -X дидан мумкин аст. Тафсилоти бештарро дар бораи чӣ гуна истифода бурдани ин интихобҳо дар ҳуҷҷатҳои асбоби JAVAC барои Windows ё Unix/Linux пайдо кардан мумкин аст. Тавре ки ҳуҷҷатҳои Javac мегӯянд, имконоти -sourcepath метавонад барои ифода кардани директорияе, ки дар он файлҳои сарчашма мавҷуд аст, истифода шавад. Дар сохтори феҳристи ман, ки дар тасвири боло нишон дода шудааст, ин маънои онро дорад, ки агар ман фармони JAVAC-ро аз директорияи C:\Java\examples\javacAndJava\ иҷро карда истодаам , ман бояд дар фармони худ чизе монанди ин дошта бошам: Javac -sourcepath src SRC\Dustin\мисолҳо\*. Java . Скриншоти зерин натиҷаҳои инро нишон медиҳад. Тартиб додан ва иҷро кардани Java бе IDE - 2Азбаски мо директорияро барои файлҳои .class муайян накардаем , онҳо ба таври нобаёнӣ дар ҳамон директорияе, ки файлҳои сарчашмаи .java , ки аз он сохта шуда буданд, ҷойгир карда шуданд. Мо метавонем интихобро -dбарои ислоҳи ин вазъият истифода барем. Фармони моро ҳоло метавон иҷро кард, масалан, Javac -sourcepath src -d classes src\Dustin\examples\*. Ман ту . Тавре ки қаблан қайд карда шуд, папкаи интихобшуда (синфҳо) бояд аллакай мавҷуд бошад. Вақте ки ин ҳодиса рӯй медиҳад, фармон файлҳои .class -ро дар ҷузвдони муайяншуда ҷойгир мекунад, тавре ки дар скриншоти зерин нишон дода шудааст. Тартиб додан ва иҷро кардани Java бе IDE - 3Бо файлҳои манбаи Java, ки ба файлҳои мувофиқи .class дар директорияи муайяншуда ҷамъ оварда шудаанд, мо метавонем барномаро бо истифода аз менюи оғозёбии зуди Асбоби сатри фармони Java. Ин танҳо тавассути риояи дастурҳои дар саҳифаҳои Java -help ё Java Tools ва муайян кардани ҷойгиршавии файлҳои .class бо опсияи -classpath( ё -cp) анҷом дода мешавад. Истифодаи ҳарду равиш барои муайян кардани феҳристи синфҳо, ки дар он файлҳои .class ҷустуҷӯ карда мешавад , дар скриншоти зерин нишон дода шудааст. Далели охирин номи пурраи (тамоми бастаи Java) синфест, ки вазифаи асосии иҷрошаванда дорад. Фармонҳое, ки дар скриншоти зерин нишон дода шудаанд, синфҳои java -cp dustin.examples.Main ва синфҳои java -classpath dustin.examples.Main мебошанд. Тартиб додан ва иҷро кардани Java бе IDE - 4

Сохтмон ва давидан бо мӯрча

Барои соддатарин замимаҳои Java, истифода бурдани JAVAC ва Java барои эҷод ва иҷро кардани барнома мутаносибан хеле осон аст, тавре ки ҳоло нишон дода шудааст. Азбаски барномаҳо каме мураккабтар мешаванд (масалан, codeе, ки дар зиёда аз як баста/директор мавҷуд аст ё синфҳои вобастагии мураккабтар аз китобхонаҳо ва чаҳорчӯбаҳои тарафи сеюм), ин равиш метавонад бесамар гардад. Apache Ant қадимтарин абзорҳои сохтани "се бузург" Java мебошад ва дар ҳазорон барномаҳо ва ҷойгиркунӣ истифода шудааст. Тавре ки ман дар як мақолаи қаблии блог гуфта будам, як файли сохтани Мӯрча хеле содда осон аст, хусусан агар он бо қолабе оғоз шавад, ки ман дар ин мақола зикр кардам. Рӯйхати рамзҳои зерин барои файли build.xml Ant аст , ки метавонад истифода шавад барои эҷод кардани файлҳои .java ба файлҳои .class ва сипас иҷро синфи dustin.examples.Main тавре ки дар боло бо JAVAC ва Java анҷом дода шуд. build.xml
<?xml version="1.0" encoding="UTF-8"?>
<project name="BuildingSansIDE" default="run" basedir=".">
   <description>Building Simple Java Applications Without An IDE</description>

   <target name="compile"
           description="Compile the Java code.">
      <javac srcdir="src"
             destdir="classes"
             debug="true"
      includeantruntime="false" />
   </target>

   <target name="run" depends="compile"
           description="Run the Java application.">
      <java classname="dustin.examples.Main" fork="true">
         <classpath>
           <pathelement path="classes"/>
         </classpath>
      </java>
   </target>
</project>
Ман хосиятҳои Ant-ро истифода накардаам ва ҳадафҳои умумиеро, ки ман одатан дохил мекунам (ба мисли "пок" ва "Javadoc") дар бар нагирифтаам, то ин мисолро то ҳадди имкон содда нигоҳ дошта, онро ба мисоли қаблӣ бо истифода аз JAVAC ва Java наздик нигоҳ дорем. . Инчунин дар хотир доред, ки ман "debug" -ро барои вазифаи JAVAC Ant ба "true" танзим кардам, зеро ин дар сурати нокомии Ant дуруст нест, балки бо пешфарзии JAVAC дуруст аст. Тааҷҷубовар нест, ки вазифаи Javac ва Java Ant ба асбобҳои фармони JAVAC ва Java шабоҳат доранд. Азбаски ман номи пешфарзро истифода кардам Ant файли сохтмонро интизор аст, вақте ки он ба таври возеҳ нишон дода нашудааст (build.xml) ва барои он ки ман ҳадафи "Иҷроиш" -ро ҳамчун "пешфарз" барои ин сохтмон пешниҳод кардам ва "компиляция" -ро ҳамчун иҷроиши вобастагӣ дохил кардам ҳадафи "Иҷро кардан" ва азбаски Мӯрча дар роҳи муҳити ман қарор дошт, ман танҳо бояд дар сатри фармон кор кунам, то ба Ант бирасонам, ки намунаи мӯрчаро дар директория бо файли build.xml тартиб диҳад ва иҷро кунад . Ин дар скриншоти зерин нишон дода шудааст. Тартиб додан ва иҷро кардани Java бе IDE - 5Гарчанде ки ман бо Ant таҳия ва иҷро кардани як барномаи оддии Java-ро нишон додам, ман майл дорам, ки танҳо бо Ant тартиб диҳам ва бо Java кор кунам (ё скрипте, ки Java-ро даъват мекунад, агар роҳи синф вазнин бошад).

Сохтмон ва давидан бо Maven

Гарчанде ки Ant аввалин асбоби асосии сохтани Java буд, Apache Maven дар ниҳоят шӯҳрати худро асосан аз ҳисоби қабули конфигуратсияи конвенсия ва дастгирии анбори китобхонаҳои муштарак ба даст овард. Истифодаи Maven осон аст, вақте ки рамз ва an objectҳои тавлидшуда тарҳбандии феҳристи стандартии онро риоя мекунанд. Мутаассифона, мисоли ман ба ин сохтори феҳрист пайравӣ намекунад, аммо Maven ба мо имкон медиҳад, ки сохтори пешфарзро аз назар гузаронем. Рӯйхати зерин рамзи файли Maven POM мебошад, ки дар ҷои директорияҳои манбаъ ва мақсаднок истифода мешавад ва дигар унсурҳои ҳадди ақали заруриро барои сохтани Maven бо истифода аз Maven 3.2.1 таъмин мекунад. pom.xml
<project>
   <modelVersion>4.0.0</modelVersion>
   <groupId>dustin.examples</groupId>
   <artifactId>CompilingAndRunningWithoutIDE</artifactId>
   <version>1</version>

   <build>
      <defaultGoal>compile</defaultGoal>
      <sourceDirectory>src</sourceDirectory>
      <outputDirectory>classes</outputDirectory>
      <finalName>${project.artifactId}-${project.version}</finalName>
   </build>
</project>
Азбаски файли pom.xml дар боло "defaultGoal" -и "compile" -ро муайян мекунад ва азбаски файлҳои pom.xml одати пешфарзии POM мебошанд, ки файли иҷрошавандаи Maven (MVN) ҷустуҷӯ мекунад ва азбаски директорияи насбкунии Maven дар роҳи ман аст, танҳо Ман бояд "MVN" -ро иҷро кунам, то файлҳои .class тартиб диҳам, тавре ки дар скриншоти зерин зикр шудааст. Тартиб додан ва иҷро кардани Java бе IDE - 6Ман инчунин метавонам барномаи тартибдодашударо аз Maven бо истифода аз фармони Mvn Exec иҷро кунам: Java -Dexec.mainClass = dustin.examples.Main , ки дар скриншоти зерин мушоҳида мешавад. Тартиб додан ва иҷро кардани Java бе IDE - 7Мисли Мӯрча, ман майл дорам, ки Maven-ро барои иҷро кардани барномаи оддии Java-и худ истифода набарам, балки ба ҷои он Java-ро дар codeи тартибдодашуда истифода барам (ё скриптеро истифода баред, ки Java-ро мустақиман дар синфҳои дароз даъват мекунад).

Сохтмон ва давидан бо Gradle

Gradle навтарин, муосиртарин ва услубӣ аз се асбоби асосии сохтани Java мебошад. Ман баъзан ба моҳияти чизи муосир шубҳа дорам, аммо ман дар бораи Gradle чизҳои зиёдеро ёфтам (ба ҷои XML дар Groovy навишта шудааст, дастгирии Ant дарунсохт, дастгирии Ivy дарунсохт, конфигуратсия аз рӯи конвенсия осон аст барои аз нав танзим кардан, дастгирии анбори Maven ва ғайра). Мисоли зерин сохтани Gradle-ро нишон медиҳад, ки метавонад барои тартиб додан ва иҷро кардани як барномаи оддӣ истифода шавад, ки рамзи асосии намунаи ин паём аст. Ман ин мисоли мутобиқшударо дар блоги Simple Gradle Java Plugin Customization пешниҳод кардам. build.gradle
apply plugin: 'java'
apply plugin: 'application'

// Redefine where Gradle should expect Java source files (*.java)
sourceSets {
    main {
        java {
            srcDirs 'src'
        }
    }
}

// Redefine where .class files are written
sourceSets.main.output.classesDir = file("classes")

// Specify main class to be executed
mainClassName = "dustin.examples.Main"

defaultTasks 'compileJava', 'run'
Ду сатри аввал аз файли build.gradle истифодаи плагини Java ва плагини Барномаро нишон медиҳад, ки дар натиҷа як қатор функсияҳо ба таври худкор дар ин сохтмон сохта мешаванд. Муайян кардани "sourceSets" ва "sourceSets.main.output.classesDir" ба шумо имкон медиҳад, ки директорияҳои Java-и пешфарзии плагини Gradle-ро барои codeи сарчашмаи Java ва синфҳои дуӣ тартибдода мутаносибан бекор кунед. Васлкунаки барнома. Сатри "defaultTasks" вазифаҳоеро муайян мекунад, ки танҳо бо ворид кардани "Gradle" дар сатри фармон иҷро мешаванд: 'compileJava' вазифаи пешфарзест, ки аз ҷониби плагини Java пешниҳод карда мешавад ва 'Иҷро кардан' вазифаи пешфарзест, ки аз ҷониби плагини Барнома пешниҳод карда мешавад. Азбаски ман маҷлисҳоро build.gradle номгузорӣ кардам ва барои ҳамин ман вазифаҳои пешфарзро ҳамчун 'compileJava' ва 'Run' муайян кардам ва азбаски ман директорияи насби Gradle дар роҳи худ дорам, танҳо барои сохтан ва иҷро кардани намунаҳо ман бояд кор кунам, ки ин навиштан буд. 'Gradle' ва ин дар скриншоти зерин нишон дода шудааст. Тартиб додан ва иҷро кардани Java бе IDE - 8Ҳатто бузургтарин скептик бояд эътироф кунад, ки сохтани Gradle барои ин мисоли оддӣ хеле лағжиш аст. Он мухтасар будани такя ба конвенсияҳо ва тахминҳои муайянро бо механизми хеле осони бартараф кардани пешфарзҳо ҳангоми зарурат муттаҳид мекунад. Далели он, ки он дар Groovy ба ҷои XML аст, низ хеле ҷолиб аст! Мисли Мӯрча ва Мавен, ман майл дорам, ки танҳо бо ин асбобҳо созам ва майл дорам, ки файлҳои тартибдодашудаи .class мустақиман аз Java ё скрипте, ки Java-ро даъват мекунад, иҷро кунам. Дар омади гап, ман майл дорам, ки ин .синфҳоро дар зарфе барои роҳандозӣ низ бойгонӣ кунам, аммо ин аз доираи ин мақола берун аст.

Хулоса

IDE аксар вақт барои сохтани барномаҳо ва мисолҳои оддӣ лозим нест ва метавонад ҳатто аз хароҷоти сохтани мисолҳои оддӣ гаронтар бошад. Дар чунин ҳолат, истифодаи JAVAC ва Java барои мустақиман сохтан ва иҷро кардани мисолҳо хеле осон аст. Ҳамчун мисоли ҷалби бештар, асбоби сохтмон ба монанди Ant, Maven ё Gradle ҷолибтар мешавад. Далели он, ки бисёре аз муҳитҳои рушд ин утorтаҳои бунёдиро дастгирӣ мекунанд, маънои онро дорад, ки таҳиягар метавонад ба IDE бо истифода аз абзори дарунсохт, ки қаблан дар ин раванд сохта шудааст, муҳоҷират кунад, агар муайян карда шавад, ки дастгирии IDE лозим аст, зеро як барномаи оддӣ ба як лоиҳаи мукаммал табдил ёфт. .
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION