Jalankan kelas dalam file Jar

176

Jika Anda memiliki file jar bernama myJar.jarterletak di / folder saya dan Anda ingin menggunakan kelas yang dipanggil myClass, bagaimana Anda melakukannya dari baris perintah?

Saya pikir akan masuk ke direktori dan mengatakan java -cp myJar.jar.myClasstetapi itu tidak berhasil. Bantuan apa pun akan dihargai.

Jim
sumber
java -cp myJar.jar myClassberfungsi dengan baik untuk saya - apakah Anda memiliki periode palsu di baris perintah Anda, bukan spasi?
Chris Dodd
1
Apa maksud Anda ketika Anda mengatakan bahwa Anda ingin 'menggunakan' kelas itu? Apakah ada metode utama yang ingin Anda panggil khususnya?
Marsellus Wallace

Jawaban:

256

Gunakan java -cp myjar.jar com.mypackage.myClass.

  1. Jika kelas tidak dalam satu paket maka cukup java -cp myjar.jar myClass.

  2. Jika Anda tidak berada dalam direktori di mana myJar.jarberada, maka Anda dapat melakukan:

    1. Pada platform Unix atau Linux:

      java -cp /location_of_jar/myjar.jar com.mypackage.myClass

    2. Di Windows:

      java -cp c:\location_of_jar\myjar.jar com.mypackage.myClass

Bitmap
sumber
10
Hanya menambahkannya - dalam kasus com.mypackage.myClass (dalam contoh di atas) memiliki dependensi pada guci lain, jalankan sebagai berikut: java -cp dependfile1.jar; dependenfile2.jar; c: \ location_of_jar \ myjar.jar com. mypackage.myClass
akjain
2
Kemungkinan jalur gagal yang harus diwaspadai jika ini tidak berhasil: pastikan jalur Anda yang sepenuhnya memenuhi syarat untuk kelas Anda cocok persis dengan apa yang ada di file jar Anda. Jika Anda melakukan unzip -l /lokasi-of-jar/myjar.jar, dan melihat sesuatu selain com / mypackage / myClass, ini adalah masalah Anda. (Misalnya, jika Anda melihat bin / com / mypackage / myClass, Anda seharusnya memasukkan cd ke dalam bin untuk membuat file jar Anda; apa yang Anda miliki tidak akan berfungsi.)
Scott C Wilson
gunakan MyClass, bukan myClass
Breno Inojosa
Dengan mencoba di atas saya mendapatkan kesalahan Pengecualian di utas "main" java.lang.NoClassDefFoundError: mentimun / api / cli / Main di com.company.project.demo.bdd.runner.Execute.main (Execute.java:20 ) Disebabkan oleh: java.lang.ClassNotFoundException: cucumber.api.cli.Main di java.net.URLClassLoader.findClass (Sumber Tidak Dikenal) di java.lang.ClassLoader.loadClass (Sumber Tidak Dikenal) di sun.misc.Launcher $ AppClassLoader. loadClass (Sumber Tidak Diketahui) di java.lang.ClassLoader.loadClass (Sumber Tidak Diketahui) ... 1 lagi
Vaibhav_Sharma
24

Kamu ingin:

java -cp myJar.jar myClass

The Dokumentasi memberikan contoh berikut:

C:> java -classpath C:\java\MyClasses\myclasses.jar utility.myapp.Cool
Richard Campbell
sumber
18

Ada dua jenis file JAR yang tersedia di Jawa:

  1. File jar Runnable / Executable yang berisi file manifes. Untuk menjalankan jar Runnable Anda dapat menggunakan java -jar fileName.jarataujava -jar -classpath abc.jar fileName.jar

  2. File jar sederhana yang tidak mengandung file manifes sehingga Anda cukup menjalankan kelas utama Anda dengan memberikan path-nya java -cp ./fileName.jar MainClass

Gaurav Singh
sumber
6

Dengan asumsi Anda berada di direktori di mana myJar.jarfile itu dan yang myClassmemiliki public static void main()metode di dalamnya:

Anda menggunakan baris perintah berikut:

java -cp ./myJar.jar myClass

Dimana:

  1. myJar.jarada di jalur saat ini , perhatikan bahwa .tidak ada di jalur saat ini di sebagian besar sistem. Jalur yang sepenuhnya memenuhi syarat lebih disukai di sini juga.

  2. myClassadalah jalur paket yang sepenuhnya memenuhi syarat untuk kelas, contoh ini mengasumsikan bahwa myClassada dalam paket default yang merupakan praktik yang buruk, jika itu dalam paket bersarang itu akan menjadi com.mycompany.mycode.myClass.


sumber
1

Ini adalah cara yang tepat untuk mengeksekusi .jar, dan apa pun yang .jarharus dimiliki oleh satu kelas main()dan berikut ini adalah parameter untuknya:

java -DLB="uk" -DType="CLIENT_IND" -jar com.fbi.rrm.rrm-batchy-1.5.jar
ubersucks
sumber