Trong tệp xây dựng bên dưới, mục tiêu jar đề cập đến thuộc tính jar.class.path cho đường dẫn lớp kê khai. Mục tiêu biên dịch tham chiếu đến project.class.pathTạo đường dẫn lớp kê khai từ <classpath> trong Ant
Có sự thừa ở đây, vì jar.class.path và project.class.path rất giống nhau. Chúng phải được cập nhật khi các thư viện được thêm vào, có thể là một nỗi đau nếu danh sách các thư viện rất dài. Có cách nào tốt hơn? Bất kỳ giải pháp nào phải là nền tảng chéo và luôn sử dụng các đường dẫn tương đối.
Chỉnh sửa:
Nó sẽ tạo đường dẫn lớp JAR từ tập dữ liệu chứ không phải theo cách khác, vì vậy tôi có thể sử dụng ký tự đại diện cho ví dụ: bao gồm tất cả các tệp JAR trong một thư mục.
<?xml version="1.0"?>
<project name="Higgins" default="jar" basedir=".">
<property name="jar.class.path" value="lib/forms-1.2.0.jar lib/BrowserLauncher.jar"/>
<path id="project.class.path">
<pathelement location="build"/>
<fileset dir="lib">
<include name="forms-1.2.0.jar"/>
<include name="BrowserLauncher.jar"/>
</fileset>
</path>
<target name="prepare">
<mkdir dir="build"/>
</target>
<target name="compile" depends="prepare" description="Compile core sources">
<javac srcdir="src"
includes="**"
destdir="build"
debug="true"
source="1.5">
<classpath refid="project.class.path"/>
</javac>
</target>
<target name="jar" depends="compile" description="Generates executable jar file">
<jar jarfile="higgins.jar">
<manifest>
<attribute name="Main-Class" value="nl.helixsoft.higgins.Main"/>
<attribute name="Class-Path" value="${jar.class.path}"/>
</manifest>
<fileset dir="build" includes="**/*.class"/>
<fileset dir="src" includes="**/*.properties"/>
</jar>
</target>
</project>
Công việc này, nhưng chỉ khi bạn không có đường dẫn tuyệt đối trong đường dẫn lớp của bạn. Ví dụ, nếu bạn đang sử dụng gói debian 'libhibernate3-java' mà cài đặt trong'/usr/share/java/hibernate3.jar' và bạn bao gồm trong classpath của bạn, tác vụ ant manifestclasspath sẽ ném một lỗi. Tuy nhiên, giải pháp của Qianjigui vẫn hoạt động. – joscarsson