2009-06-19 39 views
23

Tôi đã có một trường hợp mà tôi không thể tìm ra cách để Ant thu thập các tập tin tôi muốn trong một tập tin (tại sao trên trái đất) không phải người Ant chỉ sử dụng regex?).Tập tin Ant Tricky Ant (bao gồm hầu hết, nhưng không phải tất cả thư mục)

Đây là tình huống. Tôi có một loạt các lớp trong thư mục lớp. Tôi muốn:

1) Tất cả các tập tin dưới lớp học,

2) Nhưng không phải những người dưới/com/foo/bar

3) Trừ tôi làm muốn/com/foo/bar/AbstractCustomerAdapter .class và CustomerAdapterFactory.class.

Các tệp trong/com/foo/bar thường được đặt tên giống như FooCustomerAdapter.class.

Tóm lại, chúng tôi tạo ra 2 lọ, một với chỉ những khách hàng đặc biệt của khách hàng quảng cáo và một với mọi thứ khác. Điều này cho phép chúng tôi tạo ra một bộ điều hợp khách hàng mới và trao đổi chỉ là cái lọ nhỏ đó. Các fileset ở trên đó là giết chết tôi là "mọi thứ khác".

Khi Ant loại trừ một tệp, không bao gồm sẽ đưa nó trở lại để các mục 2 & 3 đang khiến tôi đau lòng về cách thực hiện tệp. Làm cách nào tôi có thể loại trừ tất cả các bộ điều hợp khách hàng của mình, nhưng không loại trừ bộ tiếp hợp khách hàng trừu tượng? Không có ký tự đại diện tương thích với ant mà tôi có thể làm để loại trừ các lớp XZYCustomerAdapter mà không loại trừ AbstractCustomerAdapter.

Vâng, ít nhất tôi không thể tìm ra một, nhưng hy vọng một trong các bạn Stack Overflow cư dân là thông minh hơn tôi :)

Trả lời

45

Hầu hết các tác vụ chấp nhận một tệp đơn lẻ cũng có thể chấp nhận nhiều tệp.

<jar file="..."> 
    <fileset dir="classes"> 
    <exclude name="com/foo/bar/**"/> 
    </fileset> 

    <fileset dir="classes"> 
    <include name="com/foo/bar/AbstractCustomerAdapter.class"/> 
    <include name="com/foo/bar/CustomerAdapterFactory.class"/> 
    </fileset> 
</jar> 
+0

Ngọt ngào, điều đó hoạt động! –

0

Viết custom selector. Api là dễ thực hiện. Ở đó bạn có tất cả sức mạnh của Java bạn cần quyết định.

+0

Yea, tôi đã thực sự cố gắng để tránh một selector tùy chỉnh đơn giản để khắc phục thiếu regex Ant ... :(. Nếu tôi phải đi con đường đó, tôi sẽ chỉ danh sách tay 50 file hoặc lâu hơn tôi cần phải loại trừ, xấu xí như vậy là –

1

Tôi có hai điều khác nhau tôi làm ở những nơi khác nhau. Đôi khi tôi sao chép tệp vào một vị trí tạm thời để tôi có thể bao gồm mọi thứ hợp lý trong một bước và loại trừ một số mục cụ thể trong bước sau. Lần khác, tôi sử dụng hai câu lệnh riêng biệt. Bạn có vẻ không cần các tệp tạm thời, nhưng để chuyển đổi một số tệp văn bản sang dòng PC trước khi cài đặt, tôi sao chép và chuyển đổi mọi thứ (sử dụng fixcrlf) có liên quan đến thư mục tạm thời, sau đó chọn và chọn tệp cho các nền tảng khác nhau từ hệ thống phân cấp đã tạo.

Khi tạo tệp tar, có vẻ như đủ để có thể bao gồm tệp cụ thể trên một dòng và loại trừ mẫu trên dòng sau bao gồm các tệp khác.

<tarfileset dir="classes" includes="classes" excludes="classes/com/foo/bar" />
<tarfileset dir="classes" includes="classes/com/foo/bar/AbstractCustomerAdapter.class,classes/com/foo/bar/CustomerAdapterFactory.class" />

Nếu file Jar không xây dựng như tar và zip file, bạn có thể cần phải xây dựng hệ thống phân cấp tập tin một cách rõ ràng như tôi làm với fixcrlf, và xây dựng các tập tin jar trong một đường chuyền thứ hai từ hệ thống phân cấp điều chỉnh .

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