Создать правило GWT-компиляции для Ant build.xml - PullRequest
1 голос
/ 11 февраля 2012

Я пытаюсь сделать совместимый с Eclipse проект GWT, также скомпилированный в командной строке (через Ant).

Eclipse предоставляет функциональность для экспорта build.xml; это прекрасно работает для компиляции классов, но поскольку все специальные материалы GWT предоставляются через плагин, эти правила не включены.

Google предоставляет инструмент для создания build.xml файлов для новых проектов. Я включил сгенерированные этим правила в экспортированный Eclipse файл.

Компиляция (часть, предоставленная Eclipse) выполнена успешно.

Вот задача компиляции вещей в javascript:

  <target name="gwtc" depends="build" description="GWT compile to JavaScript (production mode)">
    <java failonerror="true" fork="true" classname="com.google.gwt.dev.Compiler">
      <classpath>
        <pathelement location="war/WEB-INF/classes"/>
        <pathelement location="src"/>
        <path refid="project.class.path"/>
        <pathelement location="/Applications/eclipse/plugins/com.google.gwt.eclipse.sdkbundle_2.4.0.v201201120043-rel-r37/gwt-2.4.0/validation-api-1.0.0.GA.jar" />
        <pathelement location="/Applications/eclipse/plugins/com.google.gwt.eclipse.sdkbundle_2.4.0.v201201120043-rel-r37/gwt-2.4.0/validation-api-1.0.0.GA-sources.jar" />
      </classpath>
      <!-- add jvmarg -Xss16M or similar if you see a StackOverflowError -->
      <jvmarg value="-Xmx256M"/>
      <!--<arg line="-style PRETTY"/>-->
      <arg line="-war"/>
      <arg value="war"/>
      <!-- Additional arguments like -style PRETTY or -logLevel DEBUG -->
      <arg line="${gwt.args}"/>
      <arg value="edu.calpoly.csc.scheduler"/>
    </java>
  </target>

Файл .gwt.xml выглядит так:

<?xml version="1.0" encoding="UTF-8"?>                                                 
<module rename-to='gwtview'>                                                           
  <!-- Inherit the core Web Toolkit stuff.                        -->                  
  <inherits name='com.google.gwt.user.User'/>                                          

  <!-- Inherit the default GWT style sheet.  You can change       -->
  <!-- the theme of your GWT application by uncommenting          -->                  
  <!-- any one of the following lines.                            -->                  
  <inherits name='com.google.gwt.user.theme.clean.Clean'/>                             
  <!-- <inherits name='com.google.gwt.user.theme.standard.Standard'/> -->              
  <!-- <inherits name='com.google.gwt.user.theme.chrome.Chrome'/> -->                  
  <!-- <inherits name='com.google.gwt.user.theme.dark.Dark'/>     -->                  

  <!-- Other module inherits                                      -->                  

  <!-- Specify the app entry point class.                         -->                  
  <entry-point class='edu.calpoly.csc.scheduler.view.client.GWTView'/>                                                                                                        
  <!-- Specify the paths for translatable code                    -->                  
  <source path='client'/>                                                              
  <source path='shared'/>
  <source path='view'/>                                                                

</module> 

При попытке запустить задачу я получаю эту ошибку:

gwtc:
     [java] Compiling module edu.calpoly.csc.scheduler
     [java]    Finding entry point classes
     [java]       [ERROR] Unable to find type 'edu.calpoly.csc.scheduler.view.client.GWTView'
     [java]          [ERROR] Hint: Previous compiler errors may have made this type unavailable
     [java]          [ERROR] Hint: Check the inheritance chain from your module; it may not be inheriting a required module or a module may not be adding its source path entries properly

Что мне кажется странным, так как класс очень популярен:

[$]> ls war/WEB-INF/classes/edu/calpoly/csc/scheduler/view/client 
GWTView$1.class            GWTView$1MyHandler.class   GreetingService.class
GWTView$1MyHandler$1.class GWTView.class              GreetingServiceAsync.class

Halp

Ответы [ 2 ]

2 голосов
/ 11 февраля 2012

Вы уверены, что у вас есть источники вашего приложения GWT на classpath? GWT компилирует исходники java в js, а не * .class файлы.

1 голос
/ 12 июля 2012

Убедитесь, что у вас есть эта библиотека / jar и любой другой необходимый SOURCE, доступный по пути к классам, который вы передаете в GWT Compiler, поскольку он должен быть в состоянии найти исходный код Java внутри библиотек GWT, чтобы иметь возможность их компилировать,в отличие от компилятора Javac, который может компилироваться с библиотеками, используя только предоставленные файлы .class.

Вот мой макрос компиляции ant gwtc.(убрал начальный <, чтобы избежать проблем с форматированием ...)

macrodef name="gwtCompileApplication"  >
    <attribute name="app" />
    <attribute name="extraArgs" default="" />
    <attribute name="gwtcExtras" default="" />
    <sequential>
        <java classpathref="gwtCompile.classpath" classname="com.google.gwt.dev.Compiler" fork="true" failonerror="true">
            <jvmarg value="-Xmx512M" />

            <arg value="-strict" />

            <!-- Compile with -strict or with -logLevel set to TRACE or DEBUG to see all errors.
            <arg value="-logLevel" />
            <arg value="DEBUG" />
    -->

            <!-- request detailed, non-obfuscated JS output 
            <arg value="-style" />
            <arg value="DETAILED" />
    -->

            <arg value="-localWorkers" />
            <arg value="4" />

            <arg value="-war" />
            <arg value="${war.dir}" />

            <arg value="-deploy" />
            <arg value="deploy" />

            <!-- These two lines have been removed as otherwise it won't work on Mac OS X 
                    <arg value="@{extraArgs}" />
                    <arg value="@{gwtcExtras}" />
            -->

            <!-- This can be used to see more details about warnings, but they will be converted to errors and build will fail
            <arg value="-strict" />
            -->

            <arg value="-logLevel" />
            <arg value="INFO" />

            <arg value="@{app}" />
        </java>
    </sequential>
</macrodef>

Это может быть вызвано из любой цели следующим образом: Цель для компиляции моего конкретного модуля под названием «Admin», где находится файл Admin.Файл gwt.xml находится внутри .ta.Admin. У меня есть тип отладочной и производственной сборки и файл .gwt.xml, отличающийся для каждого из них для ускорения компиляции для отладки (меньше пользовательских агентов и языков = меньше перестановок)

target name="gwtcAdmin" depends="compile, buildtype" description="GWT Compile Admin" >
    <gwtCompileApplication app="com.bcntouch.ta.Admin.${build_type}_Admin" extraArgs="${gwtcArgs}" gwtcExtras="${gwtcExtras}"/>
</target>

Но ключевая часть, если я использую путь к классу компиляции GWT, вот цель, где я настраиваю свои пути:

target name="gwtPath">
    <path id="gwt.classpath">
        <pathelement location="${gwt.sdk.dir}/gwt-user.jar" />
        <pathelement location="${gwt.sdk.dir}/gwt-servlet.jar" />
    </path>

    <!-- For GWT compile we need a path with source AND the GWT Compiler classes -->
    <path id="gwtCompile.classpath">
        <path refid="source.classpath" />
        <!-- This is put after source, so GWT Compiler it doesn't pick up out of date versions of old css and uibinder
             files in classes generated by Eclipse/GWT Plugin -->
        <path refid="classpath" /> 
        <path refid="tool.classpath" />
    </path>     
</target>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...