2012-05-30 10 views
-4

У меня возникла ситуация, когда мне нужно динамически компилировать классы.Невозможно скомпилировать класс пакета по умолчанию, относящийся к другим классам с использованием JavaCompiler

Ниже приведена структура, в которой были организованы классы Java.

// no package 
public class A{ 
} 

package test ; 

public class B{ 
     A obj; 
    //other java code 
} 

где A - класс с пакетом по умолчанию, а B - класс с тестом имени пакета. B имеет атрибут A.

Файлы сохраняются в соответствующих папках (как в упаковке)

Я не компилировать это с JAVA Compiler API.

+2

Это почти невозможно, чтобы помочь вам, если вы не разместить свой код. –

+0

* «Любая помощь !!» * (есть ли у вас) Любой вопрос? BTW - пожалуйста, оставьте шум, как sigs. –

+0

Это может помочь (и статьи, на которые он ссылается): http://stackoverflow.com/questions/2193226/how-to-import-a-class-from-default-package –

ответ

0

Вы должны иметь возможность установить переменную classpath как параметр.

List<String> optionList = new ArrayList<String>(); 
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); 
String path =.... 
optionList.addAll(Arrays.asList("-classpath",path)); 
JavaCompiler.CompilationTask task = compiler.getTask(null, null, null,optionList,null,fileObjects); 
+0

Проблема с этим кодом заключается в том, что если у вас есть зависимость, как в, класс B использует A в качестве атрибута, то я не могу скомпилировать его. Если бы я поместил класс A в пакет (не обязательно, как из B), я могу его правильно скомпилировать. я застрял с ситуацией, где A находится в пакете по умолчанию, а B - в определенном пакете. – Pavan

2

Вы не можете обращаться к классам в пакете по умолчанию из классов в других пакетах. Это имело место с 2001 года. См. Примечания к выпуску для Java 1.4.

-1

Вы можете найти некоторые открытые ошибки в оракула сайте, связанные с этим сценарием

http://bugs.sun.com/bugdatabase/view_bug.do;jsessionid=9f121e41b450bfffffffffcc19db46db9bbc2?bug_id=4361575

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4114502

+0

Первый не относится к этой ситуации: он относится к ситуации, когда все классы находятся в пакете по умолчанию, а у одного есть внутренний класс. Второй относится к 'rmic', а не' javac', и он помечен как 'closed: not fix'. Не ответ. – EJP