2010-09-27 14 views
6

Java 1.5 ya da öylesine, javac diğer kavanozları bulmak için üçüncü taraf kavanozların tezahürünü inceliyor. Biz (-Xlint:-path ile diabled edilebilir) Derleyen zamanJavac'ı üçüncü parti kavanozlarımızın manifestlerinden Class-Path'e erişmesini engelleyebilir miyim?

kavanoz dosyaları yeniden adlandırıldı gibi
  1. , şimdi uyarıların sel olsun
  2. Dosyalar biz istemiyoruz: Bu istenmeyen yan etkileri bir dizi neden olur sınıf yolu bir sebepten dolayı bırakılsalar bile üzerine geri getiriliyorlar.
  3. Tüm bu ek kavanozlara bakmak için, aslında istemediğimiz bu şeylerin çözünürlüğünden dolayı, ek zamanlar ekleniyor.

Bu yüzden, birisinin bunu iptal etmek için sihir çağrısını bilip bilmediğini merak ediyorum. Sun'ın, istemediğimiz başka bir özellik ile bizi sarstığını ve sahip olduğumuzda kapanamayacağını varsayarsak.

+0

+1 Ben Javac bunu yapmaz bilmiyordum (karınca-contrib kullanır). Birinin bunu neden isteyeceği hakkında bir fikrin var mı? Çalışma zamanı sınıf yolu için bir sihir arzusunu (bir şekilde) anlayabilirim, ancak yapı yolunu karıştırıyorum? – Thilo

+0

Tutulma derleyicisi de bunu yapıyor mu? Bunu yerine kullanabilirsin. – Thilo

+1

İşte bu (IMHO stupid) özelliğinin eklenmesine neden olan hata: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4212732 – Archie

cevap

1

Sadece yeniden adlandırmak yerine, hatalı MANIFEST.MF girdisini kavanozlardan çıkarmak için bnd veya gölgeyi kullanın. Ya da bu yol adlarının aslında hiçbir zaman mutlak olmadıkları yüzün avantajından yararlanın. 'I-have-a-ClassPath.jar' adlı jar'ı kendi alt dizinine taşırsanız, manifest sınıfı yol girişleri bu diğer kavanozları beklenen konumlarda bulamazlar. Yine de, eğer yeterli miktarda tiftik açıyorsanız, hala böyle bir şey olacak.

2

İşte bir Ant hedef bildirim dosyaları değiştirmek için

<target name="util-modify-manifest" depends="build-classpath"> 
<for param="file"> 
    <fileset dir="${jars}" > 
     <include name="**/*.jar" /> 
    </fileset> 
    <sequential> 
     <jar jarfile="@{file}" destfile="@{file}" update="true"> 
      <manifest> 
       <attribute name="Class-Path" value="" /> 
       <attribute name="Export-Package" value="" /> 
      </manifest> 
     </jar> 
     <echo message="Manifest Replaced: @{file}" /> 
    </sequential> 
</for> 

İlgili konular