一般部
古き良きデバッグモードは、GWTで実質的にサポートされなくなり、Super Dev Modeが代わりになりました。 このモードでは、特定のアプリケーションサーバー(いわゆるCode Server)を起動します。このサーバーは、ソースJavaコードをデプロイし、それをJavaScriptと比較します。 ほとんどのソースには、Code Serverを実行しているアプリケーションをデプロイし、それを直接操作する方法が記載されています。 なぜなら 私はIntelliJ Ideaを開発環境として使用しているため、アプリケーションはその中で直接起動およびデプロイされるものと想定されています。 しかし、JEEでは、開発者は通常、産業環境に可能な限り近い環境で作業しようとするため、「Ideaの下から」産業用サーバーを起動するのはナンセンスです。 したがって、ジレンマが発生します。開発環境でCode Serverが起動され、アプリケーションサーバーが別のコンピューターで実行されています-それらと「友達を作る」方法は? 原則として、Webにはすべての必要な情報がありますが、ばらばらで矛盾しており、StackOverflowには答えもあります。 これらの事実に基づいて、また一般にSDMを実行するのがいかに難しいかを理解し、このガイドを書くことにしました。
改善とカスタマイズ
- すべての.gwt.xmlに行を追加します
<add-linker name="xsiframe"/>
これがないと、SDMは機能しません。 GWT 2.7では、これはデフォルトで構成されているため、追加できません。 産業用サーバーでこのパラメーターを使用してビルドすることもできます。 - すべての.gwt.xmlに行を追加します
<set-configuration-property name="devModeUrlWhitelistRegexp" value="http://192\.168\.1\.1(:\d+)?/.*" />
その中で、Code Serverを起動する開発者のコンピューターのIPアドレスを指定します。 産業用サーバー用のアプリケーションを構築する場合、このパラメーターを削除/コメント化することをお勧めします。 - GWTバージョン2.6.0の場合、すべての.gwt.xmlに行を追加します
<set-configuration-property name="devModeRedirectEnabled" value="true"/>
- GWT RPCを使用する場合、RemoteServiceServletのすべての子孫で、 getCodeServerPolicyUrlメソッドをオーバーライドする必要があります。 私はこのようにしました:
/** * GWT SDM. , * GWT SDM gwt.codeserver.port ( - GWT SDM) * gwt.codeserver.host ( - ). * .gwt.rpc , GWT Code Server. * , , . * ! ! */ protected String getCodeServerPolicyUrl(String strongName) { String port = System.getProperty("gwt.codeserver.port"); String host = System.getProperty("gwt.codeserver.host"); if (port == null || port.trim().isEmpty() || host == null || host.trim().isEmpty()) { return super.getCodeServerPolicyUrl(strongName); } return "http://" + host + ":" + port + "/policies/" + strongName + ".gwt.rpc"; }
メソッドの解説の内容から、GWT開発者は、Code Serverが配置されているポート番号のみを指定でき、ネットワークアドレスは指定できないことがわかります。つまり、明らかに、アプリケーションサーバーとCode Server別のコンピューターである。 - テストアプリケーションサーバーのシステムプロパティ「 gwt.codeserver.host 」および「 gwt.codeserver.port 」の値を指定します。 これは、開始パラメーターJVM -Dgwt.codeserver.host = -D = gwt.codeserver.port =を指定するか、サーバー用の特定のツールを使用して実行できます。 このため、JBoss EAPでは、設定ファイル(standalone * .xml、domain.xml)の<property name = "" value = "" />で <system-properties>ブロックを追加できます。 Code Serverの起動後、アプリケーションサーバーから指定されたアドレスとポートにアクセスできることを確認してください(telnetが「失敗」)。
- 新しいGWT構成をIdeaに追加し、その中で指定します。
- 「スーパーデベロッパーモードを使用」チェックボックスを有効にします
- デバッグを開始した後、ログに「log4j:ERROR」が表示される場合は、「VMオプション」に-Dlog4j.ignoreTCL = trueを追加します 。 あなたはこれを必要としないかもしれません;私はプロジェクトロギングライブラリと何らかの種類のGWT競合がありました
- 「開発モードのパラメーター」で-bindAddress 192.168.1.1を追加します。ここで、Code Server(開発者のコンピューター)のIPアドレスを指定します。 デフォルトでは、CodeServerはlocalhostまたは127.0.0.1でリッスンしますが、アプリケーションサーバーが別のコンピューターにある場合、そのようなアドレスでCodeServerにアクセスすることはできません。したがって、外部からアクセス可能なアドレスでリッスンするようCodeServerに指示する必要があります。
- GWT 2.6.1には、CodeServerがIdeaで起動するときに現れるグリッチがあります(開発環境から独立している場合は存在しない場合があります)。 問題は、アプリケーションを展開するときに一時ファイル用のフォルダーを再作成しようとすることであり、CodeServerを停止させるエラーで失敗します。 この問題を解決するには、gwt-codeserver.jarライブラリにパッチを適用する必要がありました。このライブラリでは、CompileDirクラスの行をコメントアウトしました
throw new UnableToCompleteException();
ファイルの最後に。 ソースはgwt-codeserver.jar自体にあります。 .javaを引き出し、修正、コンパイル、.classをgwt-codeserver.jarに戻します。 開発者だけがライブラリを必要とし、産業用サーバー(およびテスト用サーバーでも)には何もする必要がないので、このような不当な扱いを心配する理由はありません。
打ち上げ
- アプリケーションを再構築し、サーバーを起動します
- デバッグモードでCodeServer(GWT構成)を実行する
- ChromeブラウザのCodeServerログで指定されたアドレスを開きます(http://192.168.1.1:9876/)
- Dev Mode OnボタンとDev Mode Offボタンをブラウザの「お気に入り」に移動します
- 私たちのアプリケーションは、システムに入ると、ブラウザコントロールを無効にしてウィンドウが開くように設定されています。 「お気に入り」。 同じことを行う場合は、クライアント側で「Dev Mode On」と「Dev Mode Off」が利用できるようにHTMLを変更します
- ブラウザでクライアントパーツを開き、[開発モードオン]をクリックして、[コンパイル]ボタンを押します。
- Code Server側でコンパイルが完了するのを待っています。 その後、ページがリロードされます。
- ChromeでF12を押してページをリロードした後、標準の開発者ツールを開き、[ソース]タブを開きます。 左側のツリー([ソース]タブ内の[ソース]タブ)では、現在、メインアプリケーションサーバーだけでなくCodeServerからもリソースがダウンロードされていることがわかります。 CTRL + Pを押して、デバッグするJavaクラスを探し、その中にブレークポイントを入れます。
注意! GWT SDMモードでデバッグした後、変更を.gwt.xml(「devModeUrlWhitelistRegexp」)にロールバックし、アプリケーションを再ビルドします。