How do I make a JAR from a .java file?

88

I was writing a simple program using a Java application (not application that has projects, but application within a project; .java) that has a single frame. Both of the files are .java so I can't write a manifest needed by the JAR.

The MyApp.java starts like a class with package, imports then public class MyApp and has a main function, but it's still .java file! I'm writing it in JDeveloper 11g if it helps.

Any ideas how to make a JAR from these files?

user1303007
sumber
1
I think this can be accomplish much easier by using packaging tool such as ANT or Maven
Churk
Agree with Chuck. Take a look at ANT. IDEs are great for developing, but you need to understand how things works. java files are compiled via javac to .class files, after this, .class files can be packaged into a jar with the jar command. (Ant has tasks for doing this, even jdeveloper has some wizard for doing this).
BigMike
JDeveloper itself should have the capability to create jar files. A quick google search comes up with a howto here: tompeez.wordpress.com/2011/06/01/…
stolzem
1
Can you clarify your question?
Romain Hippeau
Go to source dir and run command:- javac *.java && jar cvf JarName.jar *.class
garish

Jawaban:

104

Open a command prompt.

Go to the directory where you have your .java files

Create a directory build

Run java compilation from the command line

javac -d ./build *.java

if there are no errors, in the build directory you should have your class tree

move to the build directory and do a

jar cvf YourJar.jar *

For adding manifest check jar command line switches

BigMike
sumber
I've tried compiling from the command line, but I get an error: Frame1.java:23: package oracle.jdeveloper.layout does not exist How do I solve that? Sorry for the newbie questions...
user1303007
you have to build the classpath referring all the libraries you're referencing in your classes. Check with your jdeveloper installation, there should be some ant build example (build.xml file) and at least a couple of good tutorials on how to use jDeveloper with ANT on Oracle's site.
BigMike
@user1303007 take a look here oracle.com/technetwork/articles/adf/part4-098813.html
BigMike
1
I've added an option to my jar command to automatically add the Main-Class to manifest... jar cfe Main.jar Main * (I've got confused though, I've had to put the Main-Class name after the output file name.)
Klaider
32

Simply with command line:

javac MyApp.java
jar -cf myJar.jar MyApp.class

Sure IDEs avoid using command line terminal

ab_dev86
sumber
11
Di atas berfungsi, namun saya perlu menentukan .classmyApp. Jadi itujar -cf myJar.jar myApp.class
Navigatron
3
Kesalahan ejaan di sini juga, dan ini mengasumsikan tidak ada pernyataan paket. Kurang memadai.
pengguna207421
14

Ok ini adalah solusi yang ingin saya temukan, alih-alih di sini saya menulisnya:

Pertama buat struktur direktori yang sesuai dengan paket yang ditentukan untuk file .java, jika my.super.application buat direktori "my" dan di dalamnya "super" dan di dalamnya file .java "App.java"

lalu dari baris perintah:

   javac -cp /path/to/lib1.jar:/path/to/lib2.jar path/to/my/super/App.java

Perhatikan di atas akan menyertakan beberapa perpustakaan, jika di bawah windows gunakan "," untuk memisahkan banyak file jika tidak di bawah GNU / Linux gunakan ":" Untuk membuat file jar

   jar -cvfe App.jar App my/app/

di atas akan membuat aplikasi dengan Manifes yang sesuai yang menunjukkan Aplikasi sebagai kelas utama.

Menyertakan pustaka yang diperlukan di dalam file jar tidak dapat dilakukan menggunakan parameter baris perintah java atau jar.

Sebagai gantinya Anda dapat:

  1. ekstrak perpustakaan secara manual ke folder root dari file jar
  2. gunakan IDE seperti Netbeans dan masukkan aturan di dalam bagian post-jar dari nbproject / build-impl.xml untuk mengekstrak library di dalam jar. Lihat di bawah.
<target name="-post-jar">
        <!-- Empty placeholder for easier customization. -->
        <!-- You can override this target in the ../build.xml file. -->
  <jar jarfile="${dist.jar}" update="true">  
            <zipfileset src="${dist.jar}" includes="**/*.class" />  
            <zipfileset src="${file.reference.iText-1.0.8.jar}" includes="**/*"/>
      <zipfileset src="${file.reference.itextpdf-3.2.1.jar}" includes="**/*"/>
  </jar>
    </target>

nama file.reference ditemukan di dalam file project.properties setelah Anda menambahkan pustaka ke Netbeans IDE.

sarah.ferguson
sumber
9

Seringkali Anda ingin menentukan manifes, seperti:

jar -cvfm myJar.jar myManifest.txt myApp.class

Yang berbunyi: "buat verbose jarFilename manifestFilename", diikuti dengan file yang ingin Anda sertakan. Verbose berarti mencetak pesan tentang apa yang dilakukannya.

Perhatikan bahwa nama file manifes yang Anda berikan bisa apa saja, karena jarakan secara otomatis mengganti namanya dan meletakkannya di direktori yang benar di dalam file jar.

Evgeni Sergeev
sumber
6

Ini dapat dilakukan tanpa terminal, langsung dari IDE. Netbeans, misalnya.

  1. Buat proyek terpisah dengan paket (Buat Proyek - Java - Perpustakaan Kelas Java).
  2. Tempatkan kelas .java Anda di sana.
  3. Bangun proyek ini.
  4. Buka folder proyek Anda dan temukan folder build dan dist di sana.
  5. Temukan file .jar di folder dist Anda.
  6. Dapatkan proyek Anda yang lain dan tambahkan file .jar ini ke perpustakaan proyek.
  7. Anda sekarang dapat mereferensikan kelas dari pustaka ini dan metodenya langsung dari kode, jika impor dilakukan secara otomatis untuk Anda.
Zon
sumber
3

Berikut cara hebat lain untuk melakukan ini:

$ ls | grep .java | xargs -I {} javac {} ; jar -cf myJar.jar *.class

Yang akan mengambil semua file .java ( ls | grep .java) dari direktori Anda saat ini dan mengkompilasinya ke dalam .class ( xargs -I {} javac {}) dan kemudian membuat file jar dari class yang telah dikompilasi sebelumnya ( jar -cf myJar.jar *.class).

Matthieu vdBiggelaar
sumber
2

Mungkin cara yang paling ramah bagi pemula untuk mengkompilasi JAR dari kode Java Anda adalah dengan menggunakan IDE (lingkungan pengembangan terintegrasi; pada dasarnya hanya perangkat lunak yang ramah pengguna untuk pengembangan) seperti Netbeans atau Eclipse.

  • Instal dan siapkan IDE. Ini adalah versi terbaru Eclipse .
  • Buat proyek di IDE Anda dan letakkan file Java Anda di dalam folder proyek.
  • Pilih proyek di IDE dan ekspor proyek sebagai JAR. Periksa kembali apakah file java yang sesuai dipilih saat mengekspor.

Anda selalu dapat melakukan ini semua dengan sangat mudah dengan baris perintah. Pastikan Anda berada di direktori yang sama dengan file yang ditargetkan sebelum menjalankan perintah seperti ini:

javac YourApp.java
jar -cf YourJar.jar YourApp.class

... mengubah "YourApp" dan "YourJar" menjadi nama file Anda.

Randall Arms Jr.
sumber