2009-10-04 27 views

Trả lời

12

Tôi không nghĩ rằng có một cách để duy trì quyền hiện có, mỗi ghi chú này từ copy task:

Unix Lưu ý: quyền tập tin không được giữ lại khi tập tin được sao chép; chúng kết thúc bằng các quyền UMASK mặc định thay thế. Điều này là do thiếu bất kỳ phương tiện nào để truy vấn hoặc thiết lập quyền truy cập tệp trong các thời gian chạy Java hiện tại. Nếu bạn cần một chức năng sao chép bảo quản quyền, hãy sử dụng <exec executable="cp" ... > để thay thế.

Tuy nhiên, tar task có thể mất một hoặc nhiều yếu tố tarfileset. Bạn có thể xác định tarfileset với thuộc tính filemode và/hoặc dirmode để chỉ định quyền unix. Nếu bạn chỉ định nhiều tệp chỉ bao gồm các tệp đó để nhận được từng bộ quyền cần thiết, các tệp trong tập hợp đó sẽ được bao gồm với các quyền đó.

11

Sự thiếu quyền này khiến nhiệm vụ ant tar gần như vô dụng đối với tôi. Không có cách nào để làm điều đó mà không thực hiện các tar hệ điều hành với nhiệm vụ exec:

<exec executable="tar" output="/dev/null" os="Linux"> 
     <arg value="--exclude-from=files_to_exclude.txt"/> 
     <arg value="-cvz"/> 
     <arg value="--file=${file.tar}"/> 
     <arg value="."/> 
    </exec> 

Có binaries tar gnu cho hầu hết các hệ điều hành đối với loài người. Đặt một trong số chúng trong hệ thống kiểm soát phiên bản của bạn và sử dụng nó tùy thuộc vào hệ điều hành của bạn. Có, Ant sẽ cần phải ngã ba một quá trình mỗi khi nó được chạy.

+0

Tại sao điều này lại được giảm giá? Giải pháp hoàn hảo cho vấn đề này - upvoting – purecharger

+3

Nó rất có thể bị downvoted bởi vì người trả lời không đọc câu hỏi: "Tất nhiên nó có thể được thực hiện bằng cách sử dụng nhiệm vụ exec" –

+0

ant tar là hoàn toàn vô dụng. Tôi hiểu lý do tại sao (java không thể đọc quyền truy cập tập tin hoặc một số rác), nhưng điều đó không làm cho nó hữu ích để có tất cả các quyền của tôi viết lại chỉ vì tôi muốn tar. Đây sẽ là câu trả lời đúng. – Chris

6

Sử dụng tarfileset đã hoạt động cho dự án của chúng tôi. Dưới đây là ví dụ hoạt động trong trường hợp ai đó cần:

<tar destfile="${dist}/${module.name}-${version}.tar"> 
     <tarfileset dir="${package.dir}" filemode="550" includesfile="${home.dir}/includelist.txt"> 
      <include name="*.sh"/> 
     </tarfileset> 
    </tar> 

Trong ví dụ này, includelist.txt được sử dụng để cho biết tệp nào được đưa vào tệp tar. Tất cả các tệp có phần mở rộng * .sh sẽ có quyền Đọc và Thực thi (550) cho người dùng và nhóm.

Hy vọng điều này sẽ giúp ai đó.

+0

Hãy để tôi đoán: ivy + git repositories? Bởi vì đó là điều đã đưa tôi đến câu hỏi này. – bassim

+0

đây phải là câu trả lời! đây là cách đúng để làm điều đó –

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