Đóng gói 1 ứng dụng thành executable-jar file


Đẻ đóng gói một ứng dụng thành dạng jar, ta có thể dùng tool jar sẵn có của bộ JDK. Các công việc sẽ từng bước như sau:

0. Nhớ đặt sẵn tùy biến môi trường PATH đến thư mục  %JAVA_HOME%\bin và .; , trong đó %JAVA_HOME% là thư mục cài đặt JDK.

1. Đầu tiên bạn tổ chức thư mục code của bạn cho tốt, sau đó biên dịch chúng đảm bảo không có lỗi. Ghi nhớ tên lớp thực thi (lớp chứa hàm main) của ứng dụng.

2. Tạo file manifest dạng như sau

Manifest-Version: 1.0
Main-Class:tên_lớp_có chứa_hàm_main

3.Thực thi tool jar, cú pháp tổng quát của tool jar như sau

Usage: jar {ctxui}[vfm0Me] [jar-file] [manifest-file] [entry-point] [-C dir] files …
Options:
-c  create new archive
-t  list table of contents for archive
-x  extract named (or all) files from archive
-u  update existing archive
-v  generate verbose output on standard output
-f  specify archive file name
-m  include manifest information from specified manifest file
-e  specify application entry point for stand-alone application bundled into an executable jar file
-0  store only; use no ZIP compression
-M  do not create a manifest file for the entries
-i  generate index information for the specified jar files
-C  change to the specified directory and include the following file
If any file is a directory then it is processed recursively. The manifest file name, the archive file name and the entry point name are specified in the same order as the ‘m’, ‘f’ and ‘e’ flags.

Example 1: to archive two class files into an archive called classes.jar:
jar cvf classes.jar Foo.class Bar.class
Example 2: use an existing manifest file ‘mymanifest’ and archive all the
files in the foo/ directory into ‘classes.jar’:
jar cvfm classes.jar mymanifest -C foo/ .


Ví dụ:

Giả sử chúng ta có 1 ứng dụng đơn giản gồm 2 lớp MyJFame.java và Running.java , chúng được lưu trong thư mục TyEx. Nội dung của chúng như sau

package exjar;

import java.awt.Color;
import java.awt.Font;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class MyJFame extends JFrame{
public MyJFame() {
super(”Hello World!”);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(400,200);
JLabel lbl=new JLabel(”CIAO MONDO!”,JLabel.CENTER);
lbl.setFont(new Font(”Arial”,Font.BOLD,40));
lbl.setForeground(Color.red);
this.add(lbl);
}
}

package exjar;

public class Running {
public static void main(String[] args) {
new MyJFame().setVisible(true);
}
}

Ở đây lớp chứa hàm main là lớp Running.

Biên dịch các tập tin java bằng lệnh sau hoặc copy lệnh sau vào tập tin có tên build.bat rồi thực thi

javac -d . *.java
pause

Trong thư mục TyEx ta sẽ có thư mục exjar trong đó chứa 2 tập tin MyJFame.class và Running.class

Tiếp theo ta tạo tập tin manifest có tên Ty.mf trong thư mục TyEx với nội dung sau:

Manifest-Version: 1.0
Main-Class: exjar.Running

Cuối cùng, ta sẽ đóng gói chúng thành tập tin jar tự chạy (executable jar file) bằng lệnh sau hoặc bạn cũng có thể tạo tập tin CreateJARFile.bat trong thư mục TyEx với nội dung sau rồi thực thi nó để tạo jar fiel

jar cvfm MyApp.jar Ty.mf *.java exjar/*.*
pause

Giải thích: c: (create) tạo file jar mới,    f: chỉ định tên file jar (của chúng ta có tên MyApp.jar, v: (verbose output) in thông tin đóng gói ra màn hình, m: chỉ định file manifest. *.java: đưa tất cả source file ở thư mục hiện tại vào file jar, exjar/*.*: đưa tất cả các file của thư mục exjar vào jar file.

Thực thi file này ta sẽ được tập tin MyApp.jar. Thực thi file này bằng cách double-click hoặc enter kết quả như sau:
KetquaJAR

OK, như vậy bạn đã tạo được 1 file jar tự chạy (executable jar file) được rồi đó.

Theo blog vovanhai

Để biến nó thành file EXE, bạn tham khảo tại đây

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s