Làm cách nào để tạo JAR từ tệp .java?


87

Tôi đang viết một chương trình đơn giản bằng ứng dụng Java (không phải ứng dụng có dự án, mà là ứng dụng trong dự án; .java ) có một khung duy nhất. Cả hai tệp đều là .java nên tôi không thể viết tệp kê khai mà JAR cần.

Các MyApp.java bắt đầu như một lớp học với gói, nhập khẩu sau đó public class MyAppvà có một chức năng chính, nhưng nó vẫn còn java tập tin! Tôi sẽ viết nó trong JDeveloper 11g nếu nó hữu ích.

Bất kỳ ý tưởng làm thế nào để tạo một JAR từ các tệp này?


1
Tôi nghĩ rằng đây có thể được thực hiện dễ dàng hơn nhiều bằng cách sử dụng công cụ đóng gói như ANT hoặc Maven
Churk Ghurma

Đồng ý với Chuck. Hãy nhìn vào ANT. IDE rất tốt để phát triển, nhưng bạn cần hiểu cách thức hoạt động của mọi thứ. tệp java được biên dịch thông qua javac thành tệp .class, sau đó, tệp .class có thể được đóng gói thành một jar bằng lệnh jar. (Ant có các nhiệm vụ để thực hiện việc này, ngay cả jdeveloper cũng có một số thuật sĩ để thực hiện việc này).
BigMike

Bản thân JDeveloper phải có khả năng tạo các tệp jar. Một tìm kiếm nhanh trên google đưa ra cách thực hiện ở đây: tompeez.wordpress.com/2011/06/01/…
stolzem

1
Bạn có thể làm rõ câu hỏi của bạn?
Romain Hippeau

Đi tới mã nguồn và chạy lệnh: - javac * .java && jar cvf JarName.jar * .class
garish

Câu trả lời:


103

Mở dấu nhắc lệnh.

Đi tới thư mục mà bạn có các tệp .java của mình

Tạo một bản dựng thư mục

Chạy biên dịch java từ dòng lệnh

javac -d ./build *.java

nếu không có lỗi, trong thư mục xây dựng, bạn sẽ có cây lớp của mình

di chuyển đến thư mục xây dựng và thực hiện một

jar cvf YourJar.jar *

Để thêm các công tắc dòng lệnh jar, kiểm tra tệp kê khai


Tôi đã thử biên dịch từ dòng lệnh, nhưng gặp lỗi: Frame1.java:23: package oracle.jdeveloper.layout không tồn tại Làm cách nào để giải quyết điều đó? Xin lỗi vì những câu hỏi dành cho người mới ...
user1303007

bạn phải xây dựng classpath tham chiếu đến tất cả các thư viện mà bạn đang tham chiếu trong các lớp của mình. Kiểm tra cài đặt jdeveloper của bạn, nên có một số ví dụ xây dựng kiến ​​(tệp build.xml) và ít nhất một vài hướng dẫn tốt về cách sử dụng jDeveloper với ANT trên trang web của Oracle.
BigMike


1
Tôi đã thêm một tùy chọn vào lệnh jar của mình để tự động thêm Lớp chính vào tệp kê khai ... jar cfe Main.jar Main *(Tuy nhiên, tôi đã nhầm lẫn, tôi đã phải đặt tên Lớp chính sau tên tệp đầu ra.)
Hydroper

31

Đơn giản chỉ với dòng lệnh:

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

Chắc chắn IDE tránh sử dụng đầu cuối dòng lệnh


11
Ở trên đã hoạt động, tuy nhiên tôi cần chỉ định .classmyApp. Vì vậy, nó làjar -cf myJar.jar myApp.class
Navigatron

3
Lỗi chính tả ở đây cũng vậy, và nó giả định không có câu lệnh gói. Không đủ.
Marquis of Lorne

14

Ok, đây là giải pháp tôi muốn tìm, thay vì ở đây tôi viết nó:

Đầu tiên hãy tạo cấu trúc thư mục tương ứng với gói được định nghĩa cho tệp .java, nếu là my.super.application, hãy tạo thư mục "my" và bên trong nó là "super" và bên trong nó là tệp .java "App.java"

sau đó từ dòng lệnh:

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

Lưu ý ở trên sẽ bao gồm nhiều thư viện, nếu trong windows sử dụng "," để tách nhiều tệp, nếu không trong GNU / Linux sử dụng ":" Để tạo một tệp jar

   jar -cvfe App.jar App my/app/

ở trên sẽ tạo ứng dụng với Tệp kê khai tương ứng cho biết Ứng dụng là lớp chính.

Không thể bao gồm các thư viện bắt buộc bên trong tệp jar bằng cách sử dụng các tham số dòng lệnh java hoặc jar.

Thay vào đó, bạn có thể:

  1. giải nén thủ công các thư viện vào thư mục gốc của tệp jar
  2. sử dụng IDE chẳng hạn như Netbeans và chèn quy tắc bên trong phần post-jar của nbproject / build-impl.xml để giải nén các thư viện bên trong jar. Xem bên dưới.
<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>

tên file.reference được tìm thấy bên trong tệp project.properties sau khi bạn thêm các thư viện vào Netbeans IDE.


9

Thường thì bạn sẽ muốn chỉ định một tệp kê khai, như sau:

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

Trong đó có nội dung: "tạo chi tiết jarFilename manifestFilename", theo sau là các tệp bạn muốn bao gồm. Verbose có nghĩa là in thông báo về những gì nó đang làm.

Lưu ý rằng tên của tệp kê khai bạn cung cấp có thể là bất kỳ thứ gì, vì jarnó sẽ tự động đổi tên và đặt nó vào đúng thư mục trong tệp jar.


6

Điều này có thể được thực hiện mà không cần thiết bị đầu cuối, trực tiếp từ IDE. Ví dụ: Netbeans.

  1. Tạo một dự án riêng biệt với các gói (Tạo Dự án - Java - Thư viện lớp Java).
  2. Đặt các lớp .java của bạn ở đó.
  3. Xây dựng dự án này.
  4. Đi tới thư mục dự án của bạn và tìm các thư mục xây dựng và phân bổ ở đó.
  5. Tìm tệp .jar trong thư mục dist của bạn.
  6. Nhận dự án khác của bạn và thêm tệp .jar này vào thư viện dự án.
  7. Bây giờ bạn có thể tham chiếu các lớp từ thư viện này và các phương thức của nó trực tiếp từ mã, nếu quá trình nhập tự động được thực hiện cho bạn.

3

Đây là một cách thú vị khác để làm điều này:

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

Thao tác này sẽ lấy tất cả các tệp .java ( ls | grep .java) từ thư mục hiện tại của bạn và biên dịch chúng thành .class ( xargs -I {} javac {}) và sau đó tạo tệp jar từ các lớp đã biên dịch trước đó ( jar -cf myJar.jar *.class).


2

Có lẽ cách thân thiện với người mới bắt đầu nhất để biên dịch JAR từ mã Java của bạn là sử dụng IDE (môi trường phát triển tích hợp; về cơ bản chỉ là phần mềm thân thiện với người dùng để phát triển) như Netbeans hoặc Eclipse.

  • Cài đặt và thiết lập IDE. Đây là phiên bản mới nhất của Eclipse .
  • Tạo một dự án trong IDE của bạn và đặt các tệp Java của bạn vào bên trong thư mục dự án.
  • Chọn dự án trong IDE và xuất dự án dưới dạng JAR. Kiểm tra kỹ xem các tệp java thích hợp đã được chọn khi xuất chưa.

Bạn luôn có thể làm tất cả điều này rất dễ dàng với dòng lệnh. Đảm bảo rằng bạn đang ở trong cùng một thư mục với các tệp được nhắm mục tiêu trước khi thực hiện một lệnh như sau:

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

... thay đổi "YourApp" và "YourJar" thành tên riêng của các tệp của bạn, tương ứng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.