Tôi có một tệp Ant build.xml
hoạt động tốt trên dòng lệnh: nó biên dịch, xây dựng JAR và tôi có thể thực thi phương thức chính từ JAR tốt. Tệp build.xml
tham chiếu một số thư viện của bên thứ ba nằm rải rác ở đây và ở đó. Khi xây dựng JAR, tập lệnh không bao gồm tất cả các thư viện của bên thứ ba vào bản thân JAR. Thay vào đó, nó đặt con đường của họ vào biểu hiện của JAR. Điều này giúp giữ cho JAR của tôi mỏng và gọn gàng.Sử dụng classpath của Ant trong Eclipse
Tôi muốn có thể chỉnh sửa và gỡ lỗi dự án của mình trong Eclipse, nhưng tôi không thể tìm thấy cách dễ dàng để làm như vậy. Tôi có thể có dự án của tôi sử dụng các tập tin Ant để xây dựng dự án, và điều đó dường như làm việc. Tuy nhiên, Eclipse là có khó khăn khi tìm các libaries thirdparty, và do đó Eclipse là có hai vấn đề:
- nó cho thấy (trong trình soạn thảo văn bản) rất nhiều lỗi biên dịch, vì rất nhiều lớp học là không xác định, và
- nó không thể thực thi JAR.
tôi có thể giải quyết cả hai vấn đề trên bằng cách xác định bằng tay, ở hai nơi khác nhau (ví dụ, việc xây dựng con đường qua Properties->Java Build Path->Libraries
, và classpath thực hiện qua Run Configurations->Classpath
), tất cả các thư viện của bên thứ ba. Nhưng có vẻ như tôi không cần phải làm điều này bằng tay, vì tất cả các thư viện của bên thứ ba đã được liệt kê trong bản kê khai của JAR của tôi. Tôi đang làm gì sai?
Dưới đây là build.xml
tập tin của tôi:
<!-- Set global properties for this build -->
<property name="src" location="./src" />
<property name="build" location="./build"/>
<property name="dist" location="./dist"/>
<property name="logs" location="./logs"/>
<property name="docs" location="./docs"/>
<property name="jar" location="${dist}/dynamic_analyzer.jar"/>
<property name="lib" location="../../thirdparty/lib"/>
<property name="hive-util" location="../../hive-utils/dist"/>
<property name="hpdb" location="../../hive-db/hpdb/dist"/>
<property name="static" location="../../hive-backend/static_analyzer/dist"/>
<property name="mainclass" value="com.datawarellc.main.DynamicMain"/>
<path id="dep.runtime">
<fileset dir="${lib}" includes="**/*.jar"/>
<fileset dir="${hive-util}" includes="**/*.jar"/>
<fileset dir="${hpdb}" includes="**/*.jar"/>
<fileset dir="${static}" includes="**/*.jar"/>
</path>
<target name="clean">
<delete dir="${build}"/>
<delete dir="${dist}"/>
<delete dir="${docs}"/>
<delete dir="${logs}"/>
</target>
<target name="init">
<tstamp/>
<mkdir dir="${build}"/>
<mkdir dir="${dist}"/>
<mkdir dir="${logs}"/>
</target>
<target name="compile" depends="init">
<javac srcdir="${src}" destdir="${build}" debug="on" includeantruntime="false">
<classpath refid="dep.runtime" />
</javac>
<!-- Debug output of classpath -->
<property name="myclasspath" refid="dep.runtime"/>
<echo message="Classpath = ${myclasspath}"/>
</target>
<target name="jar" depends="compile">
<!-- Put the classpath in the manifest -->
<manifestclasspath property="manifest_cp" jarfile="${jar}" maxParentLevels="10">
<classpath refid="dep.runtime" />
</manifestclasspath>
<jar jarfile="${jar}" basedir="${build}">
<manifest>
<attribute name="Main-Class" value="${mainclass}"/>
<attribute name="Class-Path" value="${manifest_cp}"/>
</manifest>
<zipfileset dir="${src}" includes="**/*.xml" />
</jar>
</target>
Bạn có thể thấy rằng tôi có thư viện của bên thứ ba trong một số thư mục (${lib}
, ${hive-util}
, ${hpdb}
, và ${static}
). Tôi sử dụng chúng để tạo một số path
được gọi là dep.runtime
. Sau đó, tôi bao gồm dep.runtime
trong tệp kê khai khi tạo jar của tôi. Làm thế nào tôi có thể nhận Eclipse sử dụng cùng một dep.runtime
cho đường dẫn xây dựng và đường dẫn lớp khi thực thi?
Kiểm tra tài liệu ở đây: http://help.eclipse.org/juno/index.jsp?topic=%2Forg.eclipse.jdt.doc.user%2Freference%2Fpreferences% 2Fjava% 2Fbuildpath% 2Fref-preferences-user-libraries.htm (Tôi muốn làm cho câu trả lời này, nhưng tôi không có cài đặt Eclipse trong tay) – leeand00
@ leeand00 Tôi không thấy tài liệu đó giúp tôi như thế nào. Trình đơn mà liên kết nói về chính xác trình đơn tôi đang sử dụng để thêm tất cả thư viện của bên thứ ba theo cách thủ công (như giải pháp tạm thời), nhưng đó chính xác là những gì tôi đang cố gắng tránh. – stepthom
Nên có một nút cho biết 'thêm thư mục' hoặc' thêm classpath' trong đó, và đó nên làm các trick ... cho tôi biết nếu nó không. – leeand00