2012-05-30 1 views
-4

클래스를 동적으로 컴파일해야하는 경우가 있습니다.JavaCompiler를 사용하여 다른 클래스에서 참조 된 기본 패키지 클래스를 컴파일 할 수 없습니다.

다음은 내 Java 클래스가 구성되어있는 구조입니다.

// no package 
public class A{ 
} 

package test ; 

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

여기서 A는 기본 패키지가있는 클래스이고 B는 패키지 이름이 test 인 클래스입니다. B에 A가 있습니다.

파일 내가 자바 컴파일러 API와이 컴파일에 실패

(패키지 당) 각 폴더에 저장됩니다.

+2

당신이 당신의 코드를 게시하지 않는 한 당신을 도울 거의 불가능에 관련된 오라클 사이트의 일부 열 버그를 찾을 수 있습니다. –

+0

* "도움이 필요합니다!"* (있으십니까) 질문 있으십니까? BTW - 시그 같은 소리를 남겨주세요. –

+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
+0

첫 번째 문제는이 상황과 관련이 없습니다. 즉, 모든 클래스가 기본 패키지에 있고 하나가 내부 클래스에있는 상황과 관련이 있습니다. 두 번째 것은'javac '가 아니라'rmic'과 관련이 있으며,'closed : not fix '로 표시됩니다. 대답이 아닙니다. – EJP

관련 문제