JavaRush /Java Blog /Random-ID /Kompilasi dan jalankan Java tanpa IDE
Ve4niY
Level 14

Kompilasi dan jalankan Java tanpa IDE

Dipublikasikan di grup Random-ID
Pada suatu waktu di reddit.com , dalam topik Mengompilasi dan menjalankan Java tanpa IDE , pertanyaannya diajukan: Apakah ada perintah yang mengkompilasi sekelompok file Java yang ada di dalam suatu paket ke dalam folder terpisah (sebut saja bin ) , dan bagaimana cara memulai file kelas baru? " Mengompilasi dan menjalankan Java tanpa IDE - 1Penulis topik, kylolink , menjelaskan: "Ketika saya mulai menggunakan Java, saya mengandalkan Eclipse untuk melakukan semua kompilasi untuk saya dan hanya khawatir tentang penulisan kodenya." Saya telah melihat pertanyaan ini berkali-kali, dan, tentu saja, ini itulah yang mendorong saya untuk memposting blog Sistem GPS dan IDE: baik atau buruk? Saya suka IDE Java modern yang kuat dan mereka membuat hidup saya lebih mudah setiap hari, tetapi ada juga manfaat mengetahui cara membangun dan menjalankan contoh sederhana Java tanpa Posting ini adalah tentang bagaimana melakukan hal tersebut. Di blog saya tentang belajar Java dengan tes sederhana, saya menulis tentang bagaimana saya kadang-kadang suka menggunakan editor teks sederhana dan alat baris perintah untuk menulis, membangun dan menjalankan aplikasi sederhana. Saya punya ide yang cukup bagus sekarang tentang berapa banyak "overhead" yang dibutuhkan oleh IDE Java favorit saya dan buat keputusan awal apakah manfaat yang dicapai dengan menggunakan kerangka kerja ini cukup untuk membenarkan "overhead". Di sebagian besar aplikasi nyata, tidak ada keraguan bahwa VL IDE sangat berharga. Namun, untuk contoh aplikasi yang paling sederhana, hal ini tidak selalu terjadi. Sisa postingan ini menunjukkan cara membuat dan menjalankan kode Java tanpa IDE untuk situasi ini.

Menulis dan Menjalankan Kode Java

Untuk membuat contoh lebih jelas, saya akan menggunakan beberapa kelas Java yang sangat sederhana yang terkait satu sama lain melalui komposisi atau pewarisan dan berada dalam paket yang sama bernama dustin.examples . Dua kelas tidak memiliki fungsi main; kelas ketiga, Main.java, memiliki fungsi mainyang memungkinkan Anda mendemonstrasikan cara menjalankan kelas tanpa IDE. Di bawah ini adalah kode untuk ketiga kelas tersebut: Parent.java
package dustin.examples;

public class Parent
{
   @Override
   public String toString()
   {
      return "I'm the Parent.";
   }
}
Anak.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 layar berikut menunjukkan struktur direktori dengan kelas .java ini Tangkapan layar menunjukkan bahwa file sumber berada dalam hierarki direktori yang mewakili nama paket ( dustin/examples , karena informasi paketnya adalah dustin.examples ) dan paket ini mencerminkan direktori hierarki berada di bawah subdirektori SRC. Saya juga membuat subdirektori kelas (yang saat ini kosong) untuk menampung file .class yang dikompilasi sehingga Javac tidak akan membuat direktori ini ketika direktori ini tidak ada.

Membangun dengan JAVAC dan menjalankan dengan Java

Apa pun pendekatan yang digunakan untuk membuat kode Java (Ant, Maven, Gradle, atau IDE), pada akhirnya semuanya bergantung pada JAVAC. Opsi standar di alat baris perintah JAVAC yang disediakan Oracle/Sun dapat dilihat dengan menjalankan JAVAC -help dan opsi ekstensi tambahan dapat dilihat dengan menjalankan JAVAC -help -X. Detail lebih lanjut tentang cara menggunakan opsi ini dapat ditemukan di dokumentasi alat JAVAC untuk Windows atau Unix/Linux. Seperti yang disebutkan dalam dokumentasi Javac, opsi -sourcepath dapat digunakan untuk mengekspresikan direktori tempat file sumber berada. Dalam struktur direktori saya yang ditunjukkan pada gambar di atas, ini berarti, dengan asumsi saya menjalankan perintah JAVAC dari direktori C:\Java\examples\javacAndJava\ , saya harus memiliki sesuatu seperti ini dalam perintah saya: Javac -sourcepath src SRC\Dustin\contoh\*. Jawa . Tangkapan layar berikut menunjukkan hasilnya. Mengompilasi dan menjalankan Java tanpa IDE - 2Karena kami tidak menentukan direktori untuk file .class , file tersebut ditempatkan secara default di direktori yang sama dengan file .java sumber tempat file tersebut dibuat. Kita dapat menggunakan opsi ini -duntuk memperbaiki situasi ini. Perintah kita dapat dijalankan sekarang, misalnya, sebagai Javac -sourcepath src -d class src\Dustin\examples\*. Aku kamu . Seperti disebutkan sebelumnya, folder (kelas) yang dipilih harus sudah ada. Ketika ini terjadi, perintah akan menempatkan file .class di folder yang ditentukan seperti yang ditunjukkan pada tangkapan layar berikut. Mengompilasi dan menjalankan Java tanpa IDE - 3Dengan file sumber Java dikompilasi ke dalam file .class yang sesuai di direktori yang ditentukan, kita dapat meluncurkan aplikasi menggunakan menu peluncuran cepat dari Alat baris perintah Java. Ini cukup dilakukan dengan mengikuti instruksi yang diberikan pada halaman Java -help atau Java tools dan menentukan lokasi file .class dengan opsi -classpath( atau -cp). Menggunakan kedua pendekatan untuk menentukan direktori kelas tempat mencari file .class ditunjukkan pada tangkapan layar berikut. Argumen terakhir adalah nama lengkap (seluruh paket Java) dari kelas yang memiliki fungsi utama yang akan dieksekusi. Perintah yang ditunjukkan pada tangkapan layar berikut adalah kelas java -cp dustin.examples.Main dan kelas java -classpath dustin.examples.Main. Mengompilasi dan menjalankan Java tanpa IDE - 4

Membangun dan Berlari dengan Ant

Untuk aplikasi Java yang paling sederhana, cukup mudah menggunakan JAVAC dan Java untuk membuat dan menjalankan aplikasi, seperti yang baru saja ditunjukkan. Ketika aplikasi menjadi sedikit lebih kompleks (misalnya, kode yang ada di lebih dari satu paket/direktori atau kelas ketergantungan yang lebih kompleks pada perpustakaan dan kerangka kerja pihak ketiga), pendekatan ini bisa menjadi sulit untuk digunakan. Apache Ant adalah yang tertua dari "tiga besar" alat pembangunan Java dan telah digunakan dalam ribuan aplikasi dan penerapan. Seperti yang saya katakan di postingan blog sebelumnya, file Ant build yang sangat sederhana mudah dibuat, terutama jika dimulai dengan template seperti yang saya uraikan di postingan ini. Daftar kode berikut adalah untuk file build.xml Ant , yang dapat digunakan untuk menyusun file .java menjadi file .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 properti Ant dan tidak menyertakan tujuan umum yang biasanya saya sertakan (seperti "murni" dan "Javadoc") untuk membuat contoh ini sesederhana mungkin dan tetap mendekati contoh sebelumnya menggunakan JAVAC dan Java . Perhatikan juga bahwa saya telah mengaktifkan "debug" yang disetel ke "true" untuk tugas JAVAC Ant karena ini tidak berlaku jika terjadi kegagalan Ant, tetapi berlaku dengan default JAVAC. Tidak mengherankan, tugas Javac dan tugas Java Ant mirip dengan alat perintah JAVAC dan Java. Karena saya menggunakan nama default Ant mengharapkan file build ketika tidak ditentukan secara eksplisit (build.xml) dan karena saya memberikan target "Jalankan" sebagai "default" untuk build ini dan karena saya menyertakan "kompilasi" sebagai eksekusi ketergantungan target "Jalankan" dan karena Ant berada di jalur lingkungan saya, yang harus saya lakukan pada baris perintah adalah membuat Ant mengkompilasi dan menjalankan contoh ant di direktori dengan file build.xml . Ini ditunjukkan pada tangkapan layar berikut. Mengompilasi dan menjalankan Java tanpa IDE - 5Meskipun saya telah mendemonstrasikan kompilasi dan menjalankan aplikasi Java sederhana dengan Ant, saya cenderung hanya mengkompilasi dengan Ant dan menjalankannya dengan Java (atau skrip yang memanggil Java jika classpathnya berat).

Membangun dan Menjalankan dengan Maven

Meskipun Ant adalah alat pembangunan inti Java yang pertama, Apache Maven akhirnya mendapatkan ketenarannya sebagian besar karena penerapan konfigurasi berbasis konvensi dan dukungan untuk repositori perpustakaan bersama. Maven mudah digunakan ketika kode dan objek yang dihasilkan mengikuti tata letak direktori standarnya. Sayangnya, contoh saya tidak mengikuti struktur direktori ini, tetapi Maven mengizinkan kita untuk mengganti struktur direktori default yang diharapkan. Daftar berikut adalah kode untuk file Maven POM yang digunakan sebagai pengganti direktori sumber dan target serta menyediakan elemen minimum lainnya yang diperlukan untuk build 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>
Karena file pom.xml di atas mendefinisikan "defaultGoal" dari "kompilasi" dan karena file pom.xml adalah kustom POM default yang dicari oleh Maven executable (MVN) dan karena direktori bin instalasi Maven ada di jalur saya, hanya Saya perlu menjalankan "MVN" untuk mengkompilasi file .class seperti yang disebutkan dalam tangkapan layar berikut. Mengompilasi dan menjalankan Java tanpa IDE - 6Saya juga dapat menjalankan aplikasi yang dikompilasi dari Maven menggunakan perintah Mvn Exec: Java -Dexec.mainClass = dustin.examples.Main , yang terlihat pada tangkapan layar berikut. Mengompilasi dan menjalankan Java tanpa IDE - 7Seperti halnya Ant, saya cenderung tidak menggunakan Maven untuk menjalankan aplikasi Java sederhana saya, melainkan menggunakan Java pada kode yang dikompilasi (atau menggunakan skrip yang memanggil Java secara langsung pada kelas yang sudah berjalan lama).

Membangun dan menjalankan dengan Gradle

Gradle adalah yang terbaru, paling trendi, dan bergaya dari tiga alat pembangunan utama Java. Saya kadang-kadang skeptis tentang esensi dari apa yang trendi, tetapi saya menemukan banyak hal yang disukai tentang Gradle (ditulis dalam Groovy, bukan XML, dukungan Ant bawaan, dukungan Ivy bawaan, konfigurasi berdasarkan konvensi yang mudah untuk mengkonfigurasi ulang, dukungan repositori Maven, dan lain-lain). Contoh berikut menunjukkan build Gradle yang dapat digunakan untuk mengkompilasi dan menjalankan aplikasi sederhana, yang merupakan kode contoh utama untuk postingan ini. Saya menyajikan contoh adaptasi ini di blog Kustomisasi Plugin Simple Gradle Java. 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 dari file build.gradle menunjukkan penggunaan plugin Java dan plugin Aplikasi, sehingga banyak fungsi yang secara otomatis dimasukkan ke dalam build ini. Mendefinisikan "sourceSets" dan "sourceSets.main.output.classesDir" memungkinkan Anda mengganti direktori Java default plugin Gradle untuk kode sumber Java dan mengkompilasi kelas biner. "MainClassName" memungkinkan Anda menentukan secara eksplisit kelas mana yang harus dijalankan dalam Plugin Aplikasi Baris "defaultTasks" mendefinisikan tugas yang akan dijalankan hanya dengan mengetikkan "Gradle" pada baris perintah: 'compileJava' adalah tugas default yang disediakan oleh plugin Java dan 'Run' adalah tugas default yang disediakan oleh plugin Aplikasi. Karena saya menamai rakitan build.gradle dan itulah sebabnya saya menetapkan tugas default sebagai 'compileJava' dan 'Run' dan karena saya memiliki direktori bin instalasi Gradle di jalur saya, yang harus saya lakukan untuk membangun dan menjalankan contoh adalah mengetik 'Gradle' dan ini ditunjukkan pada tangkapan layar berikut. Mengompilasi dan menjalankan Java tanpa IDE - 8Bahkan orang yang paling skeptis pun harus mengakui bahwa build Gradle sangat licin untuk contoh sederhana ini. Ini menggabungkan keringkasan dalam mengandalkan konvensi dan asumsi tertentu dengan mekanisme yang sangat mudah untuk mengesampingkan default bila diperlukan. Fakta bahwa itu ada di Groovy dan bukan XML juga sangat menarik! Seperti halnya Ant dan Maven, saya cenderung membangun hanya dengan alat-alat ini dan cenderung menjalankan file .class yang dikompilasi langsung dari Java atau skrip yang memanggil Java. Ngomong-ngomong, saya cenderung juga mengarsipkan .classes ini ke dalam toples untuk diluncurkan, tapi itu di luar cakupan artikel ini.

Kesimpulan

Sebuah IDE seringkali tidak diperlukan untuk membangun aplikasi dan contoh sederhana dan bahkan bisa lebih mahal daripada biaya untuk membuat contoh sederhana. Dalam kasus seperti itu, cukup mudah menggunakan JAVAC dan Java untuk membuat dan menjalankan contoh secara langsung. Sebagai contoh untuk menjadi lebih terlibat, alat pembangunan seperti Ant, Maven, atau Gradle menjadi lebih menarik. Fakta bahwa banyak lingkungan pengembangan mendukung utilitas pembangunan ini berarti bahwa pengembang dapat bermigrasi ke IDE menggunakan alat bawaan yang dibuat sebelumnya dalam proses jika ditentukan bahwa dukungan IDE diperlukan saat aplikasi sederhana tumbuh menjadi proyek penuh .
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION