21 tháng 9, 2010

Create fat-jar with Netbeans

Thông thường, khi build project trong Netbeans sẽ tạo file jar trong /dist. Tuy nhiên nếu project có các gói library ngoài thì các gói class này sẽ được build trong /dist/lib/.. Như vậy nếu muốn chạy file jar trong /dist thì buộc phải có thư mục /lib đi kèm --> rất bất tiện.
Thủ thuật sau sẽ giúp tạo 1 file jar duy nhất cho project.

Mở file build.xml  của project trong netbeans, copy đoạn code sau vào dưới cùng (trước tag đóng project):

<target name="fat-jar" depends="jar">

<!-- Change the value of this property to be the name of your JAR,

minus the .jar extension. It should not have spaces.

-->

<property name="fat-jar.name" value="jar_name"/>

<!-- don't edit below this line -->

<property name="fat-jar.dir" value="fat-jar"/>

<property name="fat-jar.jar" value="${fat-jar.dir}/${fat-jar.name}.jar"/>

<echo message="Packaging ${application.title} into a single JAR at ${fat-jar.jar}"/>

<delete dir="${fat-jar.dir}"/>

<mkdir dir="${fat-jar.dir}"/>

<jar destfile="${fat-jar.dir}/temp_final.jar" filesetmanifest="skip">

<zipgroupfileset dir="dist" includes="*.jar"/>

<zipgroupfileset dir="dist/lib" includes="*.jar"/>

<manifest>

<attribute name="Main-Class" value="${main.class}"/>

</manifest>

</jar>

<zip destfile="${fat-jar.jar}">

<zipfileset src="${fat-jar.dir}/temp_final.jar"

excludes="META-INF/*.SF, META-INF/*.DSA, META-INF/*.RSA"/>

</zip>

<delete file="${fat-jar.dir}/temp_final.jar"/>

</target>

Khi nào muốn build thì click chuột phải vào file build.xml chọn Run Target --> Other target --> fat-jar. File jar sẽ được lưu trong thư mục /fat-jar của project.
Một cách khác đó là thay đổi trực tiếp -post-jar trong build.xml như sau:


<target name="-post-jar">

<jar jarfile="dist/Combined-dist.jar">

<zipfileset src="${dist.jar}" excludes="META-INF/*" />

<zipfileset src="lib/commons-io-1.4.jar" excludes="META-INF/*" />

<manifest>

<attribute name="Main-Class" value="com.example.mypackage.Main"/>

</manifest>

</jar>

</target>

Khi đó chỉ việc build project là đoạn -post-jar sẽ được thực hiện. Trong đoạn trên chỗ thêm thư viện ngoài là attribute zipfileset, nếu muốn thêm nhiều thư viện thì có thể dùng attribute zipgroupfileset với dir="path_to_lib" includes="*.jar"

Không có nhận xét nào:

Đăng nhận xét