Locked History Actions

GWT/SuperDevMode1

サンプルの作成と起動

作成

新規プロジェクトでGoogle>Web Application Projectを選択し、プロジェクト名をsample、パッケージ名をsampleとする。 サンプルコードが生成される。

Sample.gwt.xmlには、SuperDevModeを示す行の記述がある。

  <!-- allow Super Dev Mode -->
  <add-linker name="xsiframe"/>
</module>

実行

実行してみる。プロジェクトを右クリックし、Run As>Web Applicationを実行。

※Web Application(GWT Classic Dev Mode)、Web Application(GWT Super Dev Mode)などもあるが、どれを選んでも同じ。このサンプルのままではClassic Dev Modeでは動作しないし、Classic Dev Modeは必要無いので無視。

コンソールに以下の表示がされ、

Running CodeServer with parameters: [-noprecompile, -port, 9876, -sourceLevel, 1.8, -bindAddress, 127.0.0.1, -launcherDir, C:\devel\workspace-neon\sample\war, -logLevel, INFO, -style, OBFUSCATED, sample.Sample]
Super Dev Mode starting up
   workDir: C:\Users\admin\AppData\Local\Temp\gwt-codeserver-2387345311838190448.tmp
2016-11-08 15:01:33.398:INFO::main: Logging initialized @2217ms
   Loading Java files in sample.Sample.
   Module setup completed in 26664 ms
2016-11-08 15:01:59.149:INFO:oejs.Server:main: jetty-9.2.z-SNAPSHOT
2016-11-08 15:01:59.199:INFO:oejsh.ContextHandler:main: Started o.e.j.s.ServletContextHandler@58e1199{/,null,AVAILABLE}
2016-11-08 15:01:59.225:INFO:oejs.ServerConnector:main: Started ServerConnector@3e60c10f{HTTP/1.1}{127.0.0.1:9876}
2016-11-08 15:01:59.225:INFO:oejs.Server:main: Started @28044ms

The code server is ready at http://127.0.0.1:9876/
Code server started in 27.06 s ms
2016-11-08 15:01:59.399:INFO:oejs.Server:main: jetty-9.2.z-SNAPSHOT
2016-11-08 15:02:01.707:INFO:oejsh.ContextHandler:main: Started c.g.g.d.s.j.WebAppContextWithReload@1baf4afd{/,file:/C:/devel/workspace-neon/sample/war/,AVAILABLE}{C:\devel\workspace-neon\sample\war}
2016-11-08 15:02:01.713:INFO:oejs.ServerConnector:main: Started ServerConnector@79b32995{HTTP/1.1}{127.0.0.1:8888}
2016-11-08 15:02:01.714:INFO:oejs.Server:main: Started @30533ms

ブラウザで以下のURLにてアクセス可能

http://127.0.0.1:8888/Sample.html

ブラウザにしばらく「Compling sample」の表示がされ、そのあいだコンソールには以下が出力される。

GET /recompile/sample
   Job sample.Sample_1_0
      starting job: sample.Sample_1_0
      binding: user.agent=gecko1_8
      Compiling module sample.Sample
         Unification traversed 20096 fields and methods and 1939 types. 1908 are considered part of the current module and 1908 had all of their fields and methods traversed.
         Compiling 1 permutation
            Compiling permutation 0...
            Linking per-type JS with 1888 new/changed types.
            Source Maps Enabled
         Compile of permutations succeeded
         Compilation succeeded -- 12.049s
      Linking into C:\Users\admin\AppData\Local\Temp\gwt-codeserver-2387345311838190448.tmp\sample.Sample\compile-2\war\sample; Writing extras to C:\Users\admin\AppData\Local\Temp\gwt-codeserver-2387345311838190448.tmp\sample.Sample\compile-2\extras\sample
         Link succeeded
         Linking succeeded -- 2.388s
      14.647s total -- Compile completed
         Linking succeeded -- 2.388s

Run Configuration

Eclipseに作成されるsampleのRun Configurationを見て見る。

GWTタブ

GWTタブにもやはりSuper Development ModeとClassic Development Modeの選択があるが、どちらを選択しても同じSuperにしかならない。

mainクラスとArguments

MainタブのMainクラスは

com.google.gwt.dev.DevMode

となっており、Argumentsは以下。

-remoteUI "${gwt_remote_ui_server_port}:${unique_id}" -startupUrl Sample.html -logLevel INFO -codeServerPort 9997 -port 8888 -war C:\devel\workspace-neon\sample\war sample.Sample

つまり、com.google.gwt.dev.DevModeというクラスをメインとし、それに指定する引数としてwarファイルの位置を示すなどしている。

実際に、Javaクラスを読み込んでJavaScriptに変換するのはCodeServerなのだが、それもDevModeクラスから起動されると思われる。DevModeクラスの引数は以下の通り、

DevModeを経由してCodeServerに引数が渡されると思われるが、CodeServerが受け入れる引数は以下の通り、

つまり、DevModeで-codeServerPortとして受取る引数をCodeServerには-portとして与えていると思われる。

サンプル起動直後にコンソールに表示された

Running CodeServer with parameters: [-noprecompile, -port, 9876, -sourceLevel, 1.8, -bindAddress, 127.0.0.1, -launcherDir, C:\devel\workspace-neon\sample\war, -logLevel, INFO, -style, OBFUSCATED, sample.Sample]

は、このことを表している。

CodeServerのソース指定は?

CodeServerには-srcという引数がある。上記のCodeServerへのパラメータでは指定されていないのだが、これは確実に指定する必要がある。なぜなら、JavaソースがなければJavaScriptへの変換はできないから。 ここはどうなっているのだろうか?

どこにも情報が見つからないが、わかったことは以下。

  • Eclipseのビルドパスにソースフォルダとして指定されているものは読み込まれる。
  • ただし、"test"という名前のソースフォルダは読み込まれない。

実際には、Run ConfigurationのclasspathタブのUser Entriesの値が上記のルールで自動変更されるのだが、"test"という名前でも無理やり追加すれば認識されるようだ。 しかし、こういう妙な仕様、しかもどこにも記述が無い仕様はやめてほしい。

しかも、コンソールには、どのフォルダをソースとして選択したかの情報が一切表示されない。

参考