JavaRush /Blog Java /Random-MS /Menyusun dan menjalankan Java tanpa IDE
Ve4niY
Tahap

Menyusun dan menjalankan Java tanpa IDE

Diterbitkan dalam kumpulan
Pada satu masa di reddit.com , dalam topik Menyusun dan menjalankan Java tanpa IDE , soalan ditanya: Adakah terdapat arahan yang menyusun sekumpulan fail Java yang berada di dalam pakej ke dalam folder berasingan (mari kita panggil bin ) , dan bagaimanakah saya akan melancarkan fail kelas baharu? " Menyusun dan menjalankan Java tanpa IDE - 1Pengarang topik, kylolink , menerangkan: "Apabila saya mula menggunakan Java, saya bergantung pada Eclipse untuk melakukan semua kompilasi untuk saya dan hanya bimbang tentang menulis kod." Saya telah melihat soalan ini berkali-kali, dan, sememangnya, ini is what Apa yang mendorong saya untuk menyiarkan sistem GPS dan IDE di blog: baik atau buruk? Saya suka IDE Java moden yang berkuasa dan ia menjadikan hidup saya lebih mudah setiap hari, tetapi terdapat juga faedah untuk mengetahui cara membina dan menjalankan contoh mudah Java tanpa mereka. Siaran ini adalah mengenai cara melakukan perkara itu. Dalam blog saya tentang pembelajaran Java dengan ujian mudah, saya menulis tentang bagaimana saya kadang-kadang suka menggunakan editor teks dan alat baris arahan yang mudah untuk menulis, membina dan menjalankan aplikasi mudah. ​​Saya ada idea yang cukup bagus sekarang tentang berapa banyak "overhed" Java IDE kegemaran saya memerlukan dan membuat keputusan awal sama ada faedah yang dicapai dengan menggunakan rangka kerja cukup untuk mewajarkan "overhed". Dalam kebanyakan aplikasi sebenar, tidak ada keraguan bahawa VL IDE sangat bernilai. Walau bagaimanapun, untuk contoh aplikasi yang paling mudah, ini tidak selalu berlaku. Selebihnya siaran ini menunjukkan cara membina dan menjalankan kod Java tanpa IDE untuk situasi ini.

Menulis dan Melaksanakan Kod Java

Untuk menjadikan contoh lebih jelas, saya akan menggunakan beberapa kelas Java yang sangat mudah yang berkaitan antara satu sama lain melalui gubahan atau warisan dan berada dalam pakej yang sama dipanggil dustin.examples . Dua kelas tiada fungsi main; kelas ketiga, Main.java, mempunyai fungsi mainyang membolehkan anda menunjukkan cara menjalankan kelas tanpa IDE. Di bawah ialah kod untuk tiga kelas ini: 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);
   }
}
Tangkapan skrin berikut menunjukkan struktur direktori dengan kelas .java ini . Tangkapan skrin menunjukkan bahawa fail sumber berada dalam hierarki direktori yang mewakili nama pakej ( dustin/examples , kerana maklumat pakej ialah dustin.examples ) dan pakej ini mencerminkan direktori hierarki berada di bawah subdirektori SRC. Saya juga mencipta subdirektori kelas (yang pada masa ini kosong) untuk menempatkan fail .class yang disusun supaya Javac tidak akan mencipta direktori ini apabila ia tidak wujud.

Membina dengan JAVAC dan berjalan dengan Java

Tidak kira apa pendekatan yang digunakan untuk mencipta kod Java (Ant, Maven, Gradle atau IDE), ia akhirnya datang ke JAVAC. Pilihan standard dalam alat baris arahan JAVAC yang disediakan Oracle/Sun boleh dilihat dengan menjalankan JAVAC -help dan pilihan sambungan tambahan boleh dilihat dengan menjalankan JAVAC -help -X. Butiran lanjut tentang cara menggunakan pilihan ini boleh didapati dalam dokumentasi alat JAVAC untuk Windows atau Unix/Linux. Seperti yang dikatakan oleh dokumentasi Javac, pilihan -sourcepath boleh digunakan untuk menyatakan direktori di mana fail sumber wujud. Dalam struktur direktori saya yang ditunjukkan dalam tangkapan skrin di atas, ini bermakna, dengan mengandaikan saya menjalankan arahan JAVAC dari direktori C:\Java\examples\javacAndJava\ , saya perlu mempunyai sesuatu seperti ini dalam arahan saya: Javac -sourcepath src SRC\Dustin\examples\*. Jawa . Tangkapan skrin berikut menunjukkan keputusan ini. Menyusun dan menjalankan Java tanpa IDE - 2Disebabkan kami tidak menentukan direktori untuk fail .class , ia diletakkan secara lalai dalam direktori yang sama dengan fail .java sumber dari mana ia disusun. Kita boleh menggunakan pilihan -duntuk membetulkan keadaan ini. Perintah kami boleh dijalankan sekarang, sebagai contoh, sebagai Javac -sourcepath src -d kelas src\Dustin\examples\*. Kamu saya . Seperti yang dinyatakan sebelum ini, folder (kelas) yang dipilih mestilah sudah wujud. Apabila ini berlaku, arahan akan meletakkan fail .class dalam folder yang ditentukan seperti yang ditunjukkan dalam tangkapan skrin berikut Menyusun dan menjalankan Java tanpa IDE - 3Dengan fail sumber Java disusun ke dalam fail .class yang sepadan dalam direktori yang ditentukan, kami boleh melancarkan aplikasi menggunakan menu pelancaran pantas Alat baris arahan Java. Ini hanya dilakukan dengan mengikut arahan yang diberikan pada halaman Java -help atau alat Java dan menentukan lokasi fail .class dengan pilihan -classpath( atau -cp). Menggunakan kedua-dua pendekatan untuk menentukan direktori kelas tempat mencari fail .class ditunjukkan dalam tangkapan skrin berikut. Argumen terakhir ialah nama penuh (keseluruhan pakej Java) kelas yang mempunyai fungsi utama untuk dilaksanakan. Arahan yang ditunjukkan dalam tangkapan skrin berikut ialah kelas java -cp dustin.examples.Main dan kelas java -classpath dustin.examples.Main. Menyusun dan menjalankan Java tanpa IDE - 4

Membina dan Berlari dengan Semut

Untuk aplikasi Java yang paling mudah, agak mudah untuk menggunakan JAVAC dan Java untuk mencipta dan menjalankan aplikasi, masing-masing, seperti yang ditunjukkan. Memandangkan aplikasi menjadi lebih kompleks (contohnya, kod yang wujud dalam lebih daripada satu pakej/direktori atau kelas pergantungan yang lebih kompleks pada perpustakaan dan rangka kerja pihak ketiga), pendekatan ini boleh menjadi sukar digunakan. Apache Ant ialah alat binaan Java "tiga besar" yang tertua dan telah digunakan dalam beribu-ribu aplikasi dan penggunaan. Seperti yang saya katakan dalam catatan blog sebelum ini, fail binaan Ant yang sangat mudah mudah dibuat, terutamanya jika ia bermula dengan templat seperti yang saya gariskan dalam catatan ini. Senarai kod berikut adalah untuk fail build.xml Ant , yang boleh digunakan untuk mengarang fail .java ke dalam fail .class dan kemudian menjalankan kelas dustin.examples.Main seperti yang dilakukan di atas dengan JAVAC dan 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>
Saya tidak menggunakan sifat Ant dan tidak menyertakan matlamat umum yang biasanya saya sertakan (seperti "tulen" dan "Javadoc") untuk memastikan contoh ini semudah mungkin dan memastikannya hampir dengan contoh sebelumnya menggunakan JAVAC dan Java . Ambil perhatian juga bahawa saya telah mendayakan "debug" ditetapkan kepada "true" untuk tugas JAVAC Ant kerana ini tidak benar dalam kes kegagalan Ant, tetapi benar dengan lalai JAVAC. Tidak menghairankan, tugas Javac dan tugas Java Ant menyerupai alat arahan JAVAC dan Java. Kerana saya menggunakan nama lalai Ant menjangkakan fail binaan apabila ia tidak dinyatakan secara eksplisit (build.xml) dan kerana saya menyediakan sasaran "Run" sebagai "lalai" untuk binaan ini dan kerana saya memasukkan "compile" sebagai larian kebergantungan sasaran "Jalankan" dan kerana Ant berada di laluan persekitaran saya, semua yang saya perlu lakukan pada baris arahan adalah untuk mendapatkan Ant menyusun dan menjalankan contoh semut dalam direktori dengan fail build.xml . Ini ditunjukkan dalam tangkapan skrin berikut. Menyusun dan menjalankan Java tanpa IDE - 5Walaupun saya telah menunjukkan penyusunan dan menjalankan aplikasi Java yang mudah dengan Ant, saya cenderung untuk hanya menyusun dengan Ant dan menjalankan dengan Java (atau skrip yang memanggil Java jika laluan kelasnya berat).

Membina dan Berlari dengan Maven

Walaupun Ant ialah alat binaan Java teras pertama, Apache Maven akhirnya mendapat kemasyhuran sebahagian besarnya disebabkan penggunaan konfigurasi berasaskan konvensyen dan sokongan untuk repositori perpustakaan kongsi. Maven mudah digunakan apabila kod dan objek yang dihasilkan mengikut susun atur direktori standardnya. Malangnya, contoh saya tidak mengikut struktur direktori ini, tetapi Maven membenarkan kami mengatasi struktur direktori lalai yang dijangkakan. Senarai berikut ialah kod untuk fail POM Maven yang digunakan sebagai ganti direktori sumber dan sasaran serta menyediakan elemen minimum yang diperlukan untuk binaan Maven menggunakan 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>
Memandangkan fail pom.xml di atas mentakrifkan "defaultGoal" untuk "compile" dan kerana fail pom.xml ialah tersuai POM lalai yang dicari oleh Maven executable (MVN) dan kerana direktori bin pemasangan Maven berada di laluan saya, hanya Saya perlu menjalankan "MVN " untuk menyusun fail .class seperti yang dinyatakan dalam tangkapan skrin berikut. Menyusun dan menjalankan Java tanpa IDE - 6Saya juga boleh menjalankan aplikasi yang disusun daripada Maven menggunakan arahan Mvn Exec: Java -Dexec.mainClass = dustin.examples.Main , yang diperhatikan dalam tangkapan skrin berikut. Menyusun dan menjalankan Java tanpa IDE - 7Seperti dengan Ant, saya cenderung untuk tidak menggunakan Maven untuk menjalankan aplikasi Java mudah saya, tetapi sebaliknya menggunakan Java pada kod yang disusun (atau gunakan skrip yang memanggil Java secara langsung pada kelas yang berjalan lama).

Membina dan berjalan dengan Gradle

Gradle ialah yang terbaru, paling bergaya dan bergaya daripada tiga alat binaan Java utama. Saya kadangkala ragu-ragu tentang intipati perkara yang bergaya, tetapi saya telah menemui banyak perkara yang disukai tentang Gradle (ditulis dalam Groovy dan bukannya XML, sokongan Ant terbina dalam, sokongan Ivy terbina dalam, konfigurasi mengikut konvensyen yang mudah untuk mengkonfigurasi semula, sokongan repositori Maven, dan lain-lain). Contoh berikut menunjukkan binaan Gradle yang boleh digunakan untuk menyusun dan menjalankan aplikasi mudah, yang merupakan kod sampel utama untuk siaran ini. Saya membentangkan contoh yang disesuaikan ini pada blog Penyesuaian Plugin Java Gradle Mudah. 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'
Dua baris pertama daripada fail build.gradle menunjukkan penggunaan pemalam Java dan pemalam Aplikasi, menyebabkan sekumpulan fungsi secara automatik dibina ke dalam binaan ini. Mentakrifkan "sourceSets" dan "sourceSets.main.output.classesDir" membolehkan anda mengatasi direktori Java lalai pemalam Gradle untuk kod sumber Java dan kelas binari yang disusun, masing-masing. "MainClassName" membolehkan anda menentukan secara eksplisit kelas mana yang harus dijalankan dalam Pemalam aplikasi. Baris "defaultTasks" mentakrifkan tugas yang akan dijalankan dengan hanya menaip "Gradle" pada baris arahan: 'compileJava' ialah tugas lalai yang disediakan oleh pemalam Java dan 'Run' ialah tugas lalai yang disediakan oleh pemalam Aplikasi. Kerana saya menamakan perhimpunan build.gradle dan itulah sebabnya saya menetapkan tugas lalai sebagai 'compileJava' dan 'Run' dan kerana saya mempunyai direktori bin pemasangan Gradle dalam laluan saya, apa yang perlu saya lakukan untuk membina dan menjalankan contoh ialah taip 'Gradle' dan ini ditunjukkan dalam tangkapan skrin berikut . Menyusun dan menjalankan Java tanpa IDE - 8Malah skeptik terbesar mesti mengakui bahawa binaan Gradle sangat licin untuk contoh mudah ini. Ia menggabungkan ketepatan bergantung pada konvensyen dan andaian tertentu dengan mekanisme yang sangat mudah untuk mengatasi keingkaran apabila perlu. Hakikat bahawa ia berada dalam Groovy dan bukannya XML juga sangat menarik! Seperti dengan Ant dan Maven, saya cenderung untuk membina hanya dengan alatan ini dan cenderung untuk menjalankan fail .class yang disusun terus daripada Java atau skrip yang memanggil Java. Sebenarnya, saya juga cenderung untuk mengarkibkan .class ini ke dalam balang untuk pelancaran, tetapi itu di luar skop artikel ini.

Kesimpulan

IDE selalunya tidak diperlukan untuk membina aplikasi dan contoh mudah dan boleh menjadi lebih mahal daripada kos untuk membina contoh mudah. Dalam kes sedemikian, agak mudah untuk menggunakan JAVAC dan Java untuk membina dan menjalankan contoh secara langsung. Sebagai contoh menjadi lebih terlibat, alat binaan seperti Ant, Maven atau Gradle menjadi lebih menarik. Hakikat bahawa banyak persekitaran pembangunan menyokong utiliti binaan ini bermakna pembangun boleh berhijrah ke IDE menggunakan alat terbina dalam yang dibuat lebih awal dalam proses jika ia ditentukan bahawa sokongan IDE diperlukan kerana aplikasi mudah berkembang menjadi projek sepenuhnya. .
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION