JavaRush /Java блогу /Random-KY /IDEсиз Java компиляциялоо жана иштетүү
Ve4niY
Деңгээл

IDEсиз Java компиляциялоо жана иштетүү

Группада жарыяланган
Бир убакта reddit.com сайтында Java'ны IDEсиз компиляциялоо жана иштетүү темасында суроо берилген: Пакеттин ичиндеги Java файлдарынын тобун өзүнчө папкага түзгөн буйрук барбы (келгиле, аны bin деп атайлы ) , жана жаңы класс файлдарын кантип баштоо керек? " Java программасын IDEсиз компиляциялоо жана иштетүү - 1Теманын автору, kylolink , мындай деп түшүндүрөт: "Мен Java колдоно баштаганда, мен бардык компиляцияны мен үчүн Eclipse'ге таяндым жана codeду жазуудан кооптончумун." Мен бул суроону көп жолу көрдүм, жана, чынында, бул GPS тутумдарын жана IDEлерди блогго жазууга эмне түрткү болду: жакшыбы же жаманбы?Мен күчтүү заманбап Java IDEлерди жакшы көрөм жана алар менин жашоомду күн сайын жеңилдетет, бирок жөнөкөй Java мисалдарын түзүүнү жана иштетүүнү билүүнүн дагы пайдасы бар. Бул пост муну кантип жасоо керектиги жөнүндө. Жөнөкөй тесттер менен Java тorн үйрөнүү боюнча блогумда мен кээде жөнөкөй тиркемелерди жазуу, куруу жана иштетүү үчүн жөнөкөй текст редакторун жана буйрук сабынын куралдарын кантип колдонгум келгени жөнүндө жаздым. менин сүйүктүү Java IDEлеримдин канча "үстүнө" талап кылары жана алHowты колдонуу менен жетишилген пайдалар "кошумча чыгымдарды" актоо үчүн жетиштүүбү же жокпу деген эрте чечим кабыл алуу жөнүндө абдан жакшы идея. Көпчүлүк реалдуу тиркемелерде VL IDE абдан баалуу экени талашсыз. Бирок, жөнөкөй мисал колдонмолор үчүн, бул дайыма эле боло бербейт. Бул посттун калган бөлүгү ушул жагдайлар үчүн IDEсиз Java codeун кантип курууну жана иштетүүнү көрсөтөт.

Java codeун жазуу жана аткаруу

Мисал айкыныраак болушу үчүн, мен бири-бирине композиция же мурас аркылуу байланышкан жана dustin.examples деп аталган бир пакетте турган абдан жөнөкөй Java класстарын колдоном . Эки класста функция жетишпей жатат main; үчүнчү класста, Main.javaда mainклассты IDEсиз кантип иштетүүнү көрсөтүүгө мүмкүндүк берген функция бар. Төмөндө бул үч класстын codeу: 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 менен иштөө

Java codeун түзүү үчүн кандай ыкманы колдонбосун (Ant, Maven, Gradle же IDE), ал акырында JAVACка келет. Oracle/Sun тарабынан берилген JAVAC буйрук сабынын куралындагы стандарттык опцияларды JAVAC -help жана кошумча кеңейтүү параметрлерин JAVAC -help -X иштетүү аркылуу көрүүгө болот. Бул параметрлерди кантип колдонуу керектиги жөнүндө көбүрөөк маалыматты Windows же Unix/Linux үчүн JAVAC куралынын documentтеринен тапса болот. Javac documentтеринде айтылгандай, -sourcepath опциясы булак файлдары бар каталогду билдирүү үчүн колдонулушу мүмкүн. Жогорудагы скриншотто көрсөтүлгөн каталог структурамда, бул мен C:\Java\examples\javacAndJava\ каталогунан JAVAC буйругун иштетип жатам деп ойлосом , менин буйругумда ушул сыяктуу нерсе болушу керек дегенди билдирет: Javac -sourcepath src SRC\Дастин\мисалдар\*. Java . Төмөнкү скриншот мунун натыйжаларын көрсөтөт. Биз .classJava программасын IDEсиз компиляциялоо жана иштетүү - 2 файлдары үчүн каталогду көрсөтпөгөндүктөн , алар демейки боюнча алар түзүлгөн булак .java файлдары менен бир каталогго жайгаштырылды . Бул абалды оңдоо үчүн биз опцияны колдоно алабыз . Биздин команданы азыр иштетсе болот, мисалы, Javac -sourcepath src -d класстары src\Dustin\examples\*. Мен сен . Мурда белгиленгендей, тандалган папка (класстар) мурунтан эле бар болушу керек. Мындай болгондо, команда .class файлдарын төмөнкү скриншотто көрсөтүлгөндөй көрсөтүлгөн папкага жайгаштырат. Java булак файлдары көрсөтүлгөн каталогдогу тиешелүү .class файлдарына топтолгондо , биз колдонмону тез ишке киргизүү менюсун колдонуп ишке киргизе алабыз. Java буйрук сабы куралы. Бул жөн гана Java -help же Java куралдарынын беттеринде берилген нускамаларды аткаруу жана (же ) опциясы менен .class файлдарынын жайгашкан жерин көрсөтүү менен аткарылат . .class файлдарын издей турган класстар каталогун көрсөтүү үчүн эки ыкманы тең колдонуу төмөнкү скриншотто көрсөтүлгөн. Акыркы аргумент - бул аткарыла турган негизги функцияга ээ класстын толук (толук Java пакети) аталышы. Төмөнкү скриншотто көрсөтүлгөн буйруктар java класстары -cp dustin.examples.Main жана java класстары -classpath dustin.examples.Main. -dJava программасын IDEсиз компиляциялоо жана иштетүү - 3-classpath-cpJava программасын IDEсиз компиляциялоо жана иштетүү - 4

Кумурска менен куруу жана чуркоо

Жөнөкөй Java тиркемелери үчүн, жаңы эле көрсөтүлгөндөй, тиркемени түзүү жана иштетүү үчүн JAVAC жана Java колдонуу абдан оңой. Тиркемелер бир аз татаалдашкан сайын (мисалы, бирден ашык пакетте/каталогдо бар code же үчүнчү тараптын китепканаларынан жана алHowтарынан татаалыраак көз карандылык класстарында), бул ыкма ыңгайсыз болуп калышы мүмкүн. Apache Ant "чоң үчтүк" Java куруу куралдарынын эң эскиси жана миңдеген тиркемелерде жана жайылтууларда колдонулган. Мурунку блог постумда айткандай, абдан жөнөкөй Ant куруу файлын түзүү оңой, өзгөчө, эгерде ал ушул постто белгилегендей шаблон менен башталса. Төмөнкү code тизмеси Ant's build.xml файлы үчүн, ал .java файлдарын .class файлдарына түзүү жана андан кийин жогоруда JAVAC жана Java менен жасалгандай dustin.examples.Main классын иштетүү үчүн колдонулушу мүмкүн . 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 касиеттерин колдонгон эмесмин жана бул мисалды мүмкүн болушунча жөнөкөй жана JAVAC жана Java аркылуу мурунку мисалга жакын сактоо үчүн мен адатта камтыган жалпы максаттарды (мисалы, "таза" жана "Javadoc") камтыган жокмун. . JAVAC Ant тапшырмасы үчүн мен "мүчөлөрдү оңдоону" "чындык" кылып иштеттим, анткени бул Ant иштебей калган учурда туура эмес, бирок JAVAC демейки боюнча туура. Таң калыштуу эмес, Javac тапшырмасы жана Java Ant тапшырмасы JAVAC буйрук куралдарына жана Javaга окшош. Мен Ant демейки аталышын колдонгондуктан, ал ачык көрсөтүлбөгөндө (build.xml) жана "Run" максатын "демейки" катары бергеним үчүн жана "компиляцияны" көз карандылыкты ишке киргизгеним үчүн куруу файлын күтөт. "Run" бутасы жана Ant менин чөйрөмдүн жолунда болгондуктан, мен буйрук сабында эмне кылышым керек эле, Анттын курулуш.xml файлы бар каталогдогу кумурсканын мисалын компиляциялоо жана иштетүү болду . Бул төмөнкү скриншотто көрсөтүлгөн. Java программасын IDEсиз компиляциялоо жана иштетүү - 5Мен Ant менен жөнөкөй Java тиркемесин компиляциялоону жана иштетүүнү көрсөткөнүм менен, мен Ant менен гана компиляциялап, Java менен (же класстын жолу оор болсо Java деп атаган скрипт менен) иштейм.

Мавен менен куруу жана иштетүү

Ant биринчи негизги Java куруу инструменти болгонуна карабастан, Apache Maven акыры конвенцияга негизделген конфигурацияны кабыл алуу жана жалпы китепкана репозиторийлерин колдоо аркылуу атактуу болду. Код жана түзүлгөн an objectтер анын стандарттуу каталогунун схемасына ылайык келгенде, Maven колдонуу оңой. Тилекке каршы, менин үлгүм бул каталог түзүмүн сактаbyte, бирок Maven бизге күтүлгөн демейки каталог түзүмүн жокко чыгарууга мүмкүндүк берет. Төмөнкү тизме булак жана максаттуу каталогдордун ордуна колдонулган Maven POM файлынын codeу жана Maven 3.2.1 аркылуу Maven түзүлүшү үчүн башка минималдуу талап кылынган элементтерди берет. 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 файлы "компиляциянын" "демейки максатын" аныктагандыктан жана pom.xml файлдары Maven аткарылуучусу (MVN) издеген демейки POM салт болгондуктан жана Maven орнотуу бин каталогу менин жолумда болгондуктан, бир гана Төмөнкү скриншотто айтылгандай .class файлдарын компиляциялоо үчүн "MVN" иштетишим керек. Java программасын IDEсиз компиляциялоо жана иштетүү - 6Мен ошондой эле Mvn Exec буйругун колдонуп Mavenден түзүлгөн тиркемени иштете алам : Java -Dexec.mainClass = dustin.examples.Main , ал төмөнкү скриншотто байкалат. Java программасын IDEсиз компиляциялоо жана иштетүү - 7Ant сыяктуу эле, мен жөнөкөй Java тиркемесин иштетүү үчүн Mavenди колдонбойм, анын ордуна Java'ны компиляцияланган codeдо колдоном (же Javaны түз узун класстарда чакырган скриптти колдонуңуз).

Gradle менен куруу жана чуркоо

Gradle үч негизги Java куруу куралдарынын эң жаңы, эң модалуу жана стилдүү. Мен кээде модалуу нерсенин маңызына ишенбейм, бирок мен Gradle жактырган көп нерселерди таптым (XMLдин ордуна Groovy тorнде жазылган, антташкан Ant колдоосу, орнотулган Ivy колдоосу, конвенция боюнча конфигурация оңой кайра конфигурациялоо үчүн, Maven репозиторий колдоосу, ж.б.). Төмөнкү мисал Gradle түзүмүн көрсөтөт, ал жөнөкөй тиркемени компиляциялоо жана иштетүү үчүн колдонулушу мүмкүн, бул пост үчүн негизги мисал codeу. Мен бул ылайыкташтырылган мисалды 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" аныктоо Gradle плагининин Java булак codeу жана компиляцияланган бинардык класстары үчүн демейки Java каталогдорун жокко чыгарууга мүмкүндүк берет. Колдонмо плагини. "defaultTasks" сабы буйрук сабында жөн эле "Gradle" терүү менен аткарыла турган тапшырмаларды аныктайт: 'compileJava' Java плагини тарабынан берилген демейки тапшырма жана 'Run' Колдонмо плагини тарабынан берилген демейки тапшырма. Мен жыйындарды build.gradle деп атадым, ошондуктан мен демейки тапшырмаларды "compileJava" жана "Run" деп көрсөттүм жана менин жолумда Gradle орнотуу куту каталогу болгондуктан, мисалдарды түзүп, иштетүү үчүн мен эмне кылышым керек эле? "Gradle" жана бул төмөнкү скриншотто көрсөтүлгөн. Java программасын IDEсиз компиляциялоо жана иштетүү - 8Атүгүл эң чоң скептик Gradle курулуштары бул жөнөкөй мисал үчүн абдан тайгак экенин моюнга алышы керек. Ал кээ бир конвенцияларга жана божомолдорго таянуунун кыскалыгын, зарыл болгон учурда дефолтторду жокко чыгаруу үчүн өтө жеңил механизм менен айкалыштырат. Анын XMLдин ордуна Groovyде экени да абдан жагымдуу! Ant жана Maven сыяктуу эле, мен бул куралдар менен гана курам жана түзүлө турган .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