0

カスタム Jetty コンテナーを使用して GWT アプリを開発モードで実行しています。アプリは初めて正常に読み込まれますが、更新すると、開発モード ウィンドウに次のエラーが表示されます (パスが変更されました)。

00:16:44.854 [ERROR] Unable to create file 'C:\somePath\src\war\msjavaSnack\C4EA130FD0ED44BE513FEEDDE13614DA.cache.png'
java.io.FileNotFoundException: C:\somePath\src\war\msjavaSnack\C4EA130FD0ED44BE513FEEDDE13614DA.cache.png (The requested operation cannot be performed on a file with a user-mapped section open) 
at java.io.FileOutputStream.open(Native Method) 
at java.io.FileOutputStream.<init>(FileOutputStream.java:194) 
at java.io.FileOutputStream.<init>(FileOutputStream.java:145) 
at com.google.gwt.core.ext.linker.impl.StandardLinkerContext.writeArtifactToFile(StandardLinkerContext.java:658) 
at com.google.gwt.core.ext.linker.impl.StandardLinkerContext.produceOutputDirectory(StandardLinkerContext.java:595) 
at com.google.gwt.dev.DevMode.produceOutput(DevMode.java:476) 
at com.google.gwt.dev.DevModeBase.relink(DevModeBase.java:1131) 
at com.google.gwt.dev.DevModeBase.access$000(DevModeBase.java:67) 
at com.google.gwt.dev.DevModeBase$2.accept(DevModeBase.java:1076) 
at com.google.gwt.dev.shell.ShellModuleSpaceHost$1.accept(ShellModuleSpaceHost.java:122) 
at com.google.gwt.dev.shell.StandardRebindOracle$Rebinder.rebind(StandardRebindOracle.java:59) 
at com.google.gwt.dev.shell.StandardRebindOracle.rebind(StandardRebindOracle.java:154) 
at com.google.gwt.dev.shell.ShellModuleSpaceHost.rebind(ShellModuleSpaceHost.java:119) 
at com.google.gwt.dev.shell.ModuleSpace.rebind(ModuleSpace.java:531) 
at com.google.gwt.dev.shell.ModuleSpace.rebindAndCreate(ModuleSpace.java:414) 
at com.google.gwt.dev.shell.GWTBridgeImpl.create(GWTBridgeImpl.java:39) 
at com.google.gwt.core.client.GWT.create(GWT.java:98) 
at com.extjs.gxt.ui.client.GXT.<clinit>(GXT.java:38) 
at com.extjs.gxt.ui.client.widget.Component.<clinit>(Component.java:202) 
at msjava.snack.gui.client.MSHeaderPanelViewport.<init>(MSHeaderPanelViewport.java:62) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
at com.google.gwt.dev.shell.ModuleSpace.rebindAndCreate(ModuleSpace.java:422) 
at com.google.gwt.dev.shell.ModuleSpace.onLoad(ModuleSpace.java:361) 
at com.google.gwt.dev.shell.OophmSessionHandler.loadModule(OophmSessionHandler.java:185) 
at com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:380) 
at com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:222) 
at java.lang.Thread.run(Thread.java:662)

アップデート

ProcessExplorer では、Jetty をホストしている JVM プロセスがファイルへのオープン ハンドルを持っていることがわかります。これがおそらく、他の JVM (dev モードをホストしている) がファイルに書き込めない理由です。それを回避する方法はありますか?

4

2 に答える 2

0

このページで解決策を見つけました:

http://docs.codehaus.org/display/JETTY/Files+locked+on+Windows

編集:

上記の URL は現在使用できません。

Jetty の wiki で解決策を見つけるのは非常に簡単です。

Jetty は、メモリ マップ ファイルの使用を有効または無効にする DefaultServlet の webdefault.xml ファイルに構成スイッチを提供します。Windows で実行していて、ファイル ロックの問題が発生している場合は、このスイッチを設定して、メモリ マップ ファイル バッファーを無効にする必要があります。

デフォルトの webdefault.xml ファイルは、org/eclipse/jetty/webapp/webdefault.xml の lib/jetty.jar にあります。これを便利なディスクの場所に抽出し、それを編集して useFileMappedBuffer を false に変更します。

https://wiki.eclipse.org/Jetty/Howto/Deal_with_Locked_Windows_Files

于 2013-05-16T14:39:33.260 に答える