2011-01-04 2 views
10

Tôi đã theo dõi The Java Archive Tool nhưng không thể tìm thấy cách loại trừ các thư mục.Thực hiện lệnh jar loại trừ các tệp

Ví dụ, tôi có các tập tin trong thư mục bản sao làm việc:

workingcopy 
--src 
    --.svn 
    -- com 
--.svn 
--WebContent 

Tôi muốn biên dịch và tạo jar chỉ từ các lớp dưới src trừ tất cả các thư mục bắt đầu với thư mục svn. Tôi muốn chạy nó từ cmd như jar -cf test.jar vv ..

Tôi có thể làm như thế nào?

Trả lời

2

Đây có thể là một cách giải quyết thiết thực cho vấn đề của bạn: nó sẽ không loại trừ thư mục lật đổ (thư mục) nhưng chỉ bao gồm các tập tin lớp (giả sử, bạn không file lớp đặt dưới sự kiểm soát phiên bản):

jar -cf test.jar *.class 

tiếp tục nâng cao: mã riêng biệt từ các tập tin lớp. Bạn không muốn để kiểm tra trong các tập tin lớp học (xây dựng các đồ tạo tác) anyway:

workingcopy 
--src 
    --.svn 
    -- com // only *.java files in here and below 
--.svn 
--WebContent 
--bin 
    --com // only *.class files in here and below 
+0

Tôi chỉ có các lớp Java ở đó. Tôi cũng có thể biên dịch nó cho các lớp học thông qua jar hoặc bất kỳ dòng lệnh khác không phải với ANT? – Dejell

+0

@Odelya - sử dụng 'javac' để biên dịch các tệp nguồn java và (tùy chọn)' jar' để tạo thư viện. 'jar' không thể biên dịch và bạn không * cần * kiến ​​hoặc maven, nhưng đặc biệt là kiến ​​rất đơn giản hóa quá trình xây dựng (nhưng bạn phải học/hiểu kiến ​​thức cơ bản về kiến). maven đơn giản hóa nhiều hơn nhưng maven hơi khó hiểu hơn. Và nó yêu cầu kết nối internet (vĩnh viễn). –

+0

@Anderas_D yes Tôi đã làm việc với Maven nhưng không thích nó vì plugin cho nhật thực gây ra rất nhiều công việc phụ và không phải mọi thứ đã được biên soạn. cho đến khi tôi tìm thấy một plugin tốt, tôi không muốn quay lại Maven và pom.xml. Tôi biết làm thế nào để sử dụng ANT nhưng nó đã được đơn giản cho tôi để thực hiện nó từ FinalBuilder mà không có và tập tin bên ngoài cho build.xml – Dejell

0

Nó không giống như chương trình jar bởi chính nó sẽ có thể thực hiện việc này. Bạn sẽ cần phải thêm vào một số loại kịch bản khác để hoàn thành những gì bạn đang tìm kiếm.

Dường như bạn có thể đang sử dụng cửa sổ, do đó, tôi đoán là bạn có thể viết những phần còn thiếu theo cách đó.

Hy vọng điều này sẽ hữu ích.

1

này có thể dễ dàng đạt được (cùng với nhiều thứ khác) bằng cách xây dựng các công cụ như mavenantgradle

0

Như đã nói bởi javamonkey79, I don' tthink bạn có thể làm điều này chỉ với công cụ jar riêng của mình. Những gì bạn nên làm là xem xét antjar task của nó.

1

Có một khái niệm được gọi là Xuất trong SVN. nếu bạn sử dụng nó, bạn sẽ nhận được cấu trúc không có kho .svn. Nó hơi khác so với Check-Out.

Sau này, bạn phải có khả năng thực hiện lệnh jar thông thường từ thư mục đó thay vì thư mục lưu trữ.

18

này có thể được thực hiện với một lệnh:

jar cf test.jar `find . -not -path "*/.svn/*" -not -type d` 

Vấn đề với jar là nếu thư mục được truyền nó sẽ được bổ sung một cách đệ quy với tất cả nội dung. Vì vậy, mục tiêu của chúng tôi là chỉ truyền các tệp và chỉ những tệp trong số đó không có chuỗi con .svn 'trong đường dẫn.Với mục đích này find lệnh được sử dụng với 2 điều kiện:

  1. -not -path "*/.svn*" lọc ra tất cả các file svn
  2. -not -type d lọc ra tất cả các thư mục

này sẽ loại trừ các thư mục rỗng từ jar mặc dù.

+0

Điều này đã giảm thời gian xây dựng của tôi đáng kể. Cảm ơn bạn. – SomeGuyOnAComputer