2010-12-22 30 views
9

Ant'de yeni bir görev tanımlıyorum. Bir kavanoz olarak ihraç ve benim Buildfile eklendi:Görev listesi için Classpath?

<taskdef classname="X" classpath="Y.jar"/> 

sorun bu çalışma zamanında başarısız olmasıdır. Bana dersi bulamadığını söylüyor. Kavanozu sınıf yoluna ekleyerek düzeltildi.

Soruma şudur: Sınıf yolunu değiştirmeden, Ant derleme dosyasındaki kavanozumu kullanmamın bir yolu var mı?

cevap

1

Evet. Sadece görev adını ve uygulama sınıfını gösteren taskdef için doc'a baktığınızı farz ediyorum. Ancak, taskdef alt sınıfları typedef ve ikincisi için doc'a bakarsanız, classpath özniteliğinin de olduğunu görürsünüz. Bu öznitelik kullanılarak, karınca komut dosyalarınızın belirli bir ortama bağlı olduğu anlamına gelir; çok portatif değiller. Daha iyi bir yaklaşım, -libinvocation option'u kullanarak sınıf yolunu Ant'e aktarmaktır.

+2

Eğer bir 'CLASSPATH' ortam değişkeni kullanıyorsanız, yapmayın. Ortam kurulumunuzdan silin ve sınıf yollarını açıkça belirtme alışkanlığına girin. Aksi takdirde, kendinizi bir kütüphanenin sınıf yolunuzdan yüklendiği ve bunu beklemediğiniz bir hata ayıklama sorunuyla karşılaşabilirsiniz. Ya da başka biri kodunuzu çalıştıramaz çünkü aynı "CLASSPATH" ortam değişkenine sahip değildir. – Anon

+3

Neden bunun çok daha iyi bir yaklaşım olduğunu göremiyorum_. Sınıf yollarını '-lib 'seçeneği ile belirtmek, yalnızca kullanıcıyı bu yollardan haberdar eder. Kullanıcıya nerede aramaları gerektiğini söylemeniz gerekir (örneğin, benioku, yardım dosyası veya yankı mesajı). Veya proje dizini hiyerarşinizi, bu lib'leri belirli bir alt dizide içerecek şekilde yeniden yapılandırmaya ve "ortamdan bağımsız" olmaya karar verebilirsiniz. Bir derleme betiği bu ayrıntılara dikkat etmeli ve ideal olarak 'karınca' çağrısına sahip mantıklı bir nesne üretmelidir. – Alberto

8

Kavanozunuzun yolunu biliyorsanız, karınca komut dosyasında kendi göreviniz için sınıf yolunu tanımlayabilirsiniz.

<taskdef name="myTaskName" classname="com.myorg.myclass"> 
    <classpath> 
    <pathelement location="pathToMyJar.jar"/> 
    </classpath> 
</taskdef> 
İlgili konular