Yalnızca belirli bir dosya varsa bir blok yürütecek bir ANT Görevi var mı? Ben sadece belirli bir yapılandırma dosyası varsa, bazı özel işleme yapması gerekir genel bir ant komut dosyası var sorun var.
Yalnızca belirli bir dosya varsa bir blok yürütecek bir ANT Görevi var mı? Ben sadece belirli bir yapılandırma dosyası varsa, bazı özel işleme yapması gerekir genel bir ant komut dosyası var sorun var.
Yanıtlar:
<target name="check-abc">
<available file="abc.txt" property="abc.present"/>
</target>
<target name="do-if-abc" depends="check-abc" if="abc.present">
...
</target>
if
ve unless
öznitelikleri yalnızca eklendikleri hedefi etkinleştirir veya devre dışı bırakır, yani hedefin bağımlılıkları her zaman yürütülür. Aksi takdirde, kontrol ettiğiniz mülkü ayarlayan bir hedefe bağlı olarak çalışmayacaktır.
<Available>
kaldırılmış gibi görünüyor . Bunu kullandım: <target name="do-if-abc" if="${file::exists('abc.txt')}"> ... </target>
kontrol edin: nant.sourceforge.net/release/0.85/help/functions/…
<available>
kullanımdan kaldırıldığı nerede belirtilir ? 2: ${file::existst...}
Ant ile çalışmıyor gibi görünüyor (Apache ANT 1.9.7)
Bu, kodlama perspektifinden biraz daha mantıklı olabilir (karınca katkısı ile kullanılabilir: http://ant-contrib.sourceforge.net/ ):
<target name="someTarget">
<if>
<available file="abc.txt"/>
<then>
...
</then>
<else>
...
</else>
</if>
</target>
Ant 1.8.0'dan beri kaynak var.
Gönderen http://ant.apache.org/manual/Tasks/conditions.html
Bir kaynağı varlığını test eder. Ant 1.8.0'dan beri
Test edilecek gerçek kaynak, iç içe geçmiş bir öğe olarak belirtilir.
Bir örnek:
<resourceexists> <file file="${file}"/> </resourceexists>
Bu soruya yukarıdaki iyi cevabın örneğini yeniden çalışmak üzereydim ve sonra bunu buldum
Ant 1.8.0'dan itibaren, bunun yerine özellik genişletmeyi kullanabilirsiniz; true (veya on veya yes) değeri öğeyi etkinleştirir, false (veya off veya no) değeri ise devre dışı bırakır. Diğer değerlerin yine de özellik adları olduğu varsayılır ve bu nedenle öğe yalnızca belirtilen özellik tanımlanmışsa etkinleştirilir.
Eski stille karşılaştırıldığında, bu size ek esneklik sağlar, çünkü koşulu komut satırından veya üst komut dosyalarından geçersiz kılabilirsiniz:
<target name="-check-use-file" unless="file.exists"> <available property="file.exists" file="some-file"/> </target> <target name="use-file" depends="-check-use-file" if="${file.exists}"> <!-- do something requiring that file... --> </target> <target name="lots-of-stuff" depends="use-file,other-unconditional-stuff"/>
http://ant.apache.org/manual/properties.html#if+unless adresindeki karınca kılavuzundan
Umarım bu örnek bazılarına faydalıdır. Kaynak varoluşları kullanmıyorlar, ama muhtemelen yapabilirsin?
if="${file.exists}"
ile değiştirilmesi ve mülkün değerinin değil, yalnızca ismine göre kontrol edilmesi gerektiğini unutmayın . if="file.exists"
if
unless
Bence bu benzer cevaba değinmeye değer: https://stackoverflow.com/a/5288804/64313
İşte başka bir hızlı çözüm. Bu <available>
etiketi kullanarak başka varyasyonlar da olabilir :
# exit with failure if no files are found
<property name="file" value="${some.path}/some.txt" />
<fail message="FILE NOT FOUND: ${file}">
<condition><not>
<available file="${file}" />
</not></condition>
</fail>
DB_*/**/*.sql
Joker karakter filtresine karşılık gelen bir veya daha fazla dosya varsa bir eylemi gerçekleştirmek için bir varyasyon. Yani, dosyanın tam adını bilmiyorsunuz.
Burada, " DB_ * " adı verilen herhangi bir alt dizinde " * .sql " dosyaları arıyoruz . Filtreyi ihtiyaçlarınıza göre ayarlayabilirsiniz.
Not: Apache Ant 1.7 ve üstü!
Eşleşen dosyalar varsa bir özellik ayarlama hedefi şunlardır:
<target name="check_for_sql_files">
<condition property="sql_to_deploy">
<resourcecount when="greater" count="0">
<fileset dir="." includes="DB_*/**/*.sql"/>
</resourcecount>
</condition>
</target>
Yalnızca dosyalar varsa çalışan "koşullu" bir hedef:
<target name="do_stuff" depends="check_for_sql_files" if="sql_to_deploy">
<!-- Do stuff here -->
</target>
İşlemi, ihtiyacınız olan adlara eşit olan dosyaların bir listesiyle yapmak için sipariş vererek yapabilirsiniz. Özel bir hedef oluşturmaktan çok daha kolay ve doğrudan. Ek bir araca ihtiyacınız yok, sadece saf Ant.
<delete>
<fileset includes="name or names of file or files you need to delete"/>
</delete>
Bkz . FileSet .