Thứ Năm, 14 tháng 3, 2013

Make file .jar include library 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):




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

  2.   

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

  4.   

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

  6.   

  7. -->  

  8.   

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

  10.   

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

  12.   

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

  14.   

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

  16.   

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

  18.   

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

  20.   

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

  22.   

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

  24.   

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

  26.   

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

  28.   

  29. <manifest>  

  30.   

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

  32.   

  33. </manifest>  

  34.   

  35. </jar>  

  36.   

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

  38.   

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

  40.   

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

  42.   

  43. </zip>  

  44.   

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

  46.   

  47. </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:



  1. <target name="-post-jar">  

  2.   

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

  4.   

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

  6.   

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

  8.   

  9. <manifest>  

  10.   

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

  12.   

  13. </manifest>  

  14.   

  15. </jar>  

  16.   

  17. </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"

0 nhận xét:

Đăng nhận xét