2013-03-11 3 views
1

Java App에서 GWT 프로젝트를 컴파일해야합니다. 그래서 내가 출력 디렉토리 등을 설정하는 CompilerOptions와 컴파일러 인스턴스를 생성Java 응용 프로그램에서 프로그래밍 방식으로 GWT 프로젝트를 컴파일하는 방법은 무엇입니까?

내 코드는 다음과 같다 :

Compiler compiler=new Compiler(new CompilerOptions() {...... 
.... 
} 

    ModuleDef def=new ModuleDef("sampleweb"); 
      def.clear(); 
      def.addSourcePackage("D:\\projects\\sampleweb\\src\\com\\sample\\web", new String[]{"client"}, new String[]{}, new String[]{}, true, false); 
      def.addGwtXmlFile(new File("D:\\projects\\sampleweb\\src\\com\\sampleweb\\web\\Sampleweb.gwt.xml")); 
      TreeLogger logger=new SwingTreeLogger(new SwingLoggerPanel(Type.ALL, new File("x.txt"))); 
      compiler.run(logger,def); 

compiler.run가 호출 될 때 발생합니다 같이 NullPointerException이

Exception in thread "main" java.lang.NullPointerException 
    at com.google.gwt.dev.cfg.ModuleDef.getCompilationState(ModuleDef.java:373) 
    at com.google.gwt.dev.Precompile.precompile(Precompile.java:246) 
    at com.google.gwt.dev.Precompile.precompile(Precompile.java:229) 
    at com.google.gwt.dev.Precompile.precompile(Precompile.java:141) 
    at com.google.gwt.dev.Compiler.run(Compiler.java:232) 
    at com.asklepian.TestApp.Starter.main(Starter.java:400) 

컴파일러를 어떻게 구성해야합니까?

+2

처음부터 'ModuleDef'를 생성해야합니까? 'ModuleDefLoader'를 보셨습니까? BTW,'Compiler'는 classpath에서 모든 것을로드합니다.이 클래스는'URLClasspath'이어야합니다 (GWT는 클래스 패스). –

+0

+1. 짐작하면 GWT Compilation for Swing 용 UI 도구를 작성하는 것입니다. Console, Eclipse 및 IntelliJ가 충분한 이유가 없습니까? – SSR

+0

@ThomasBroyer 나중에 .. 사용자 요구 사항에 따라 사용자 지정 Ui 위젯을 작성해야하며 개발 된 위젯에 해당하는 JS를 생성하기 위해 컴파일해야합니다. 사용자가 동일한 Java 코드처럼 위젯을 작성합니다 (예 : –

답변

0

Java 소스 코드와 XML 모듈 코드 만 만들고 GWT 컴파일러를 호출하는 Java 프로세스를 실행합니다. GWT 컴파일러는 com.google.gwt.dev.Compiler에 있으며 Windows의 경우 DOS 명령 쉘에서 java 명령을 사용하여 실행할 수 있습니다. 컴파일러에 필요한 유일한 매개 변수는 GWT 모듈 위치 (모듈 xml 파일의 위치)입니다.

+0

컴파일러가 여러 장소에서'System.exit'을 호출하기 때문에 이것이 유일한 옵션 일 것입니다. 이것은 오류가있는 스레드를 계속 처리하기보다는 종료하기 위해 수행됩니다. –

+2

AFAICT,'System.exit'은'main()'에서만 호출됩니다. 성공적으로 Maven mojo에서 컴파일러를 호출합니다. –