2010-03-02 13 views
9

Piszę ant build.xml plik, który wykonuje następujące czynności:zachowuj uprawnienia plików podczas rozpakowywania i skompresowanie plików przy użyciu ant

  • Bierze spakowany folder (.zip)
  • rozpina go
  • Dodaje liczbę plików
  • suwakami się powstałych plików

wyciąg z kodem z build.xml:

<!-- Unzip SDK to a temporary directory --> 
<unzip src="${zipFile}" dest="tmp"/> 

<!-- pull in the files from another directory --> 
<copy todir="tmp/someDirectory" > 
    <fileset dir="${addedFiles}" /> 
</copy> 

<!-- Zip up modified SDK --> 
<zip destfile="${destDir}" basedir="tmp"/> 

Wszystko działa idealnie, z tym że uprawnienia ustawione dla spakowanych plików przed uruchomieniem kompilacji ant są tracone w pliku zip utworzonym przez kompilację ant. Na przykład pliki, które wcześniej były wykonywalne, już nie są.

Moje pytanie: czy można użyć mrówki do dodawania plików do archiwum zip bez niszczenia uprawnień już istniejących plików?

używam Ant 1.7.1

Odpowiedz

3

Okazuje się, że ant zniszczy wszystkie informacje o uprawnieniach podczas rozpakowywania z powodu ograniczenia w Javie. Jednak to, co jest możliwe to, aby dodać pliki do istniejącego pliku zip, który zachowuje uprawnienia istniejących plików:

<!-- Add to zip --> 
<zip destfile="${existingZipFiledirectory}.zip" 
    basedir="${directoryOfFilesToAdd}" 
    update="true" 
/> 

Powyższy skrypt zaktualizować plik zip określony z treścią w basedir, zachowując uprawnienia do plików w oryginalny zamek błyskawiczny.

-1

O ile mi wiadomo, ta funkcja (preserve0permissions) został wprowadzony z Ant 1.8. Poprzednie wersje Anta nie zachowały uprawnień.

Jeśli utknąłeś z Ant 1.7.1, możesz użyć Tar, który - jeśli się nie mylę - przechowuje uprawnienia.

+1

Nie, "preserve0permissions" jest inne, ma to związek z przypadkiem, w którym dodajesz wpisy do jednego pliku zip z innego (używając ''). Ant zawsze był w stanie kopiować uprawnienia z jednego zip do drugiego, ale przed Ant 1.8, jeśli źródłowy plik zip miał zerową wartość w polu uprawnień dla danego wpisu, pozycja w pliku docelowym byłaby zawsze tworzona z domyślnymi uprawnieniami (zwykle 644 lub 755). 'preserve0permissions =" ​​yes "' zamiast tego zachowa wartość zerową w docelowym pliku zip. –

7

I napotkał ten sam problem przy użyciu Ant cel rozpakowywania:

<unzip src="${project.build.directory}/${project.build.finalName}.zip" dest="${user.home}/apps" overwrite="true" /> 

Pozwolenie skryptów powłoki wewnątrz pliku zip został utracony podczas korzystania cel rozpakowywania powyżej.

Po pewnym dochodzeniu używam następującego polecenia "exec" z parametrem "unzip", zadziałało.

<!-- Use command line unzip to keep file permissions --> 
<exec executable="unzip" spawn="true"> 
    <arg line="-o ${project.build.directory}/${project.build.finalName}.zip -d ${user.home}/apps" /> 
</exec> 

Mam nadzieję, że pomoże to komuś innemu w przypadku napotkania tego rodzaju problemów.

Dzięki, J

+0

Spowoduje to rozpakowanie pliku zip i uzyskasz te same uprawnienia, co podczas spakowania? – fscore

+0

Tak, tak myślę. –

6

Nie można dostać zadanie pocztowy, aby zachować uprawnienia do plików, ale można ustawić je wyraźnie:

<zip destfile="installer.zip" > 
<zipfileset filemode="755" dir="../" includes="artisan/install.*" /> 
</zip> 

(ten pracował dla mnie na Windows i OSX)

+0

Działa również pod GNU Linux, właśnie testowałem z Mageia Linux 4. Dzięki. – gouessej

Powiązane problemy