2009-10-14 18 views

cevap

36

javax.tools.JavaCompiler#getTask() yöntemi, derleyici seçeneklerini ayarlamanıza olanak sağlayan options parametresini alır. - Eğer derleyici kullanmak Sen kavanoz dosyaları (ler) hakkında bilmek standart java dosya yöneticisi yapılandırmanız gerekir

: Aşağıdaki message çağıran programın sınıf yolunu erişmek için bunları ayarlamak için kolay bir yol tarif eder Bunu yapmak için seçenek argümanı. Varsayılan olarak

java derleyici nesne sadece varsayılan hakkında bootclasspath için yerleri biliyor gibi görünüyor, terimlerin kendi sınıf yolunda bir içinde ve endorseddirs dizinleri extdirs.

Sen java derleyici çağıran programın akım sınıf yolunu eklemeniz gerekir örneği en üzerinde sonra kavanoz dosyalarında sınıfları bulacaksınız standart dosya yöneticisi, iletilir hangi. İşte

Ben the compiler wrapper I wrote

List<String> optionList = new ArrayList<String>(); 
// set compiler's classpath to be same as the runtime's 
optionList.addAll(Arrays.asList("-classpath",System.getProperty("java.class.path"))); 

// any other options you want 
optionList.addAll(Arrays.asList(options)); 

JavaCompiler.CompilationTask task = compiler.getTask(out,jfm,diagnostics,optionList,null,jfos); 

sonra gerekir Tüm arama programı çalıştırırken doğru sınıf yolu setini elde etmektir bu işler nasıl bu.

+0

Satheesh yayınlanmıştır Bu bir cevap olarak, "Eğer derleyici sarıcı (link çalışmaz) paylaşmak mümkün olacak." –

+0

bu yazı için bir değirmen teşekkürler, bu çağlar için mücadele ve bu cevap oldu ... şerefe :) – flexinIT

+2

BTW, 'JavaCompiler'in classpath' seçeneği joker karakterlerini" anlamıyor ". Yani her "jar", doğrudan bu dizgeye eklemelisiniz. – Andremoniy

2

Son zamanlarda da aynı sorun oluştu, sonunda iki geçici çözüm buldum. Sen veya Compiler.getTask (ARG_0, ARG_1, ARG_2, CLASS_PATH_OPTIONS, burada yayınlanan ilk cevap dediği gibi StandardJavaFileManager.setLocation çağırmak yoluyla (StandardLocation.CLASS_PATH, "YOUR_CLASS_PATH") sınıfı yolunu ayarlayabilirsiniz.

+0

Bunu işe almak için 'StandardJavaFileManager.setLocation (StandardLocation.CLASS_PATH, Arrays.asList (new File (classpath))); –