2009-03-25 28 views
8

Tôi có một bố trí dự án tiêu chuẩn cho một dự án java:Lớp kiến ​​thức Apache ant manifest?

project/
    src/
     source_file_1.java 
     ... 
     source_file_N.java 
    build/
      classes/
       source_file_X.class 
       ... 
      jar/
       MyJar.jar 
    lib/
      SomeLibrary.jar 
      SomeOtherLibrary.jar 

Theo như tôi có thể nói, tôi đang xây dựng dự án một cách chính xác với Ant. Tôi cần thiết lập thuộc tính class-path trong file Manifest để các lớp của tôi có thể sử dụng các thư viện cần thiết.

Các thông tin liên quan sau đây từ build.xml

<target name="compile" depends="init"> 
    <javac srcdir="src" destdir="build\classes"> 
     <classpath id="classpath"> 
      <fileset dir="lib"> 
       <include name="**/*.jar" /> 
      </fileset> 
     </classpath> 
    </javac> 
</target> 

<target name="jar" depends="compile"> 
    <jar destfile="build\jar\MyJar.jar" basedir="build\classes" > 
     <manifest> 
      <attribute name="Built-By" value="${user.name}" /> 
     </manifest> 
    </jar> 
</target> 

Bất kỳ đẩy đi đúng hướng được đánh giá cao. Cảm ơn

Trả lời

8

Nhìn vào NetBeans tạo của tôi xây dựng tập tin, tôi thấy đoạn này trong -do-jar-with-libraries nhiệm vụ:

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

Vì vậy, nói cách khác, có vẻ như bạn chỉ cần thêm thuộc tính khác với nhiệm vụ biểu hiện rằng bạn đã có.

Xem thêm Manifest Task documentation.

+0

Tôi tự mình đi đến kết luận này trước khi trả lời, mặc dù tôi không biết về jar.classpath. Tôi đã bị ném bởi trong tài liệu kiến ​​ant http://ant.apache.org/manual/CoreTasks/manifestclasspath.html –

+0

oh yea và nhờ –

+0

jar.classpath được định nghĩa bởi NetBeans ở nơi khác trong tệp xây dựng, tôi tin. –

37

Giả sử các thư viện không thay đổi vị trí từ biên dịch để thực hiện các tập tin jar, bạn có thể tạo ra một yếu tố đường dẫn đến classpath của bạn bên ngoài của đối tượng biên dịch như sau:

<path id="compile.classpath"> 
    <fileset dir="lib" includes="**/*.jar"/> 
</path> 

Sau đó, bạn có thể sử dụng đường dẫn tạo bên trong nhiệm vụ javac của bạn thay cho classpath hiện tại của bạn.

<classpath refid="compile.classpath"/> 

Sau đó, bạn có thể sử dụng đường dẫn để đặt đường dẫn tệp kê khai.

<target name="jar" depends="compile"> 
    <manifestclasspath property="jar.classpath" jarfile="build\jar\MyJar.jar"> 
     <classpath refid="compile.classpath"/> 
    </manifestclasspath>  
    <jar destfile="build\jar\MyJar.jar" basedir="build\classes" > 
     <manifest> 
      <attribute name="Built-By" value="${user.name}" /> 
      <attribute name="Class-Path" value="${jar.classpath}"/> 
     </manifest> 
    </jar> 
</target> 

Tệp kê khai tạo ra đường dẫn lớp được định dạng phù hợp để sử dụng trong tệp kê khai phải được bao bọc sau 72 ký tự. Đường dẫn lớp dài chứa nhiều tệp jar hoặc đường dẫn dài có thể không hoạt động chính xác mà không sử dụng tác vụ manifestclasspath.

+0

Ngoài ra với flatten: http://stackoverflow.com/questions/858766/generate-manifest-class-path-from-classpath-in-ant – Vadzim

Các vấn đề liên quan