2013-03-11 1 views
1

Мне нужно скомпилировать проект GWT из Java-приложения. Так я создал экземпляр компилятора с CompilerOptions, который устанавливает выходные каталоги и т.д.Как скомпилировать проект GWT программно из приложения Java?

Мой код выглядит так:

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 будет _scan_ classpath) –

+0

+1. Угадайте, что вы пишете инструмент пользовательского интерфейса для компиляции GWT с Swing. Любые причины для консоли, затмения и IntelliJ недостаточны? – SSR

+0

@ThomasBroyer ya .. Мне нужно создать пользовательские виджеты Ui в соответствии с требованиями пользователя и скомпилировать его для генерации соответствующих JS для разработанных виджетов. Пользователь будет создавать виджеты как один и тот же Java-код, например, мы пишем –

ответ

0

Я бы создал только исходный код Java и код модуля XML, а затем выполнил процесс Java, который вызывает компилятор GWT. Компилятор GWT находится в com.google.gwt.dev.Compiler, и вы можете выполнить его в Windows из командной оболочки DOS с помощью команды java. Единственным параметром, который необходим компилятору, является расположение модуля GWT (расположение файла xml-модуля).

+0

Это будет единственный реальный вариант, так как компилятор вызывает 'System.exit' в нескольких местах. Это делается для того, чтобы закрыть любые странные потоки, а не позволять им продолжать работу. –

+2

AFAICT, 'System.exit' вызывается только из' main() '. Я успешно вызываю компилятор непосредственно в Maven mojo. –

Смежные вопросы