设置java类路径(用于超级开发模式)

时间:2012-06-29 16:18:54

标签: java gwt classpath gwt-super-dev-mode

我尝试使用命令

在OSX.7中运行jar gwt-codeserver.jar
java -cp ".:/sdk/gwt-2.5.0.rc1/gwt-dev.jar" -jar /sdk/gwt-2.5.0.rc1/gwt-codeserver.jar com.activegrade.TeacherView

命令失败,显示:

Exception in thread "main" java.lang.NoClassDefFoundError: com/google/gwt/core/ext/TreeLogger
Caused by: java.lang.ClassNotFoundException: com.google.gwt.core.ext.TreeLogger
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    ...

但是gwt-dev.jar包含com.google.gwt.core.ext.TreeLogger的定义,所以我得出结论,我没有在这里正确设置类路径。

我是否正确设置了类路径? jar文件肯定是正确的jar,它肯定在那个位置。我该如何进一步诊断?

6 个答案:

答案 0 :(得分:7)

我已经将CodeServer作为Eclipse中的外部工具运行(需要注意的是 - 你仍然必须以某种方式为你的html文件服务,我还没有这样做,但这似乎让代码服务器运行)。要将CodeServer设置为Eclipse中的外部工具,

0)请记住,您还应该更新module.gwt.xml文件以允许Super Dev Mode书籍标记并启用源映射以进行调试。将这些喜欢添加到您的module.gwt.xml文件中。

<!-- enable the SuperDevMode book marklets  -->
<add-linker name="xsiframe"/>
<set-configuration-property name="devModeRedirectEnabled" value="true"/>

<!--  enable source maps -->
<set-property name="compiler.useSourceMaps" value="true" />

1)打开“外部工具/外部工具配置”对话框;这是在Windows的顶级“运行”菜单下。

2)通过选择左侧列表中的“程序”创建新配置,然后按“新建”按钮(它看起来像文档)。在对话框中命名您的配置。

3)java.exe文件的路径位于“位置:”框中。如果您不知道路径,可以使用“浏览文件系统”按钮找到它。

4)我把工作目录留空了。我不确定这是否重要;它没有它似乎工作。有没有人知道是否应该设置这个?

5)“Arguments:”框中的大部分工作。您将为类路径提供一个参数,该路径将包含gwt-dev.jar,gwt.user.jar,gwt-codeserver.jar和源目录的路径。然后,您将为gwt-codeserver.jar和要运行的CodeServer类提供-jar和参数,然后您将为CodeServer提供参数。我会分解它;

5a)-cp“用逗号分隔的类路径列表,用双引号括起来”。为了使您的工具定义更具可移植性,请使用eclipse“Varaibles”计算相对于您的安装的路径。特别是,我将'workspace_loc'用于工作空间相对路径(如src目录)和'eclipse_home'用于gwt SDK的路径比如gwt-user.jar(因为我在eclipse插件文件夹中安装了SDK)。这是我的classpath部分;

-cp "${eclipse_home}plugins\gwt-2.5.0.rc1\gwt-2.5.0.rc1\gwt-user.jar;${eclipse_home}plugins\gwt-2.5.0.rc1\gwt-2.5.0.rc1\gwt-dev.jar;${workspace_loc:\GWTFractionTest\war\WEB-INF\lib\gwtquery-1.1.0.jar};${eclipse_home}plugins\gwt-2.5.0.rc1\gwt-2.5.0.rc1\gwt-codeserver.jar"

5b)接下来是java.exe应该运行的类的名称。这是CodeServer类;

com.google.gwt.dev.codeserver.CodeServer 

5c)接下来是CodeServer的参数。第一个是直接到src的路径。对我来说,这是一个工作空间相对路径;

-src "${workspace_loc:\GWTFractionTest\src}" 

5d)最后,模块路径(你的gwt.xml文件的类路径)这是我的;

com.conceptua.fractiontest.FractionTest

这是我的完整参数列表;

-cp "${eclipse_home}plugins\gwt-2.5.0.rc1\gwt-2.5.0.rc1\gwt-user.jar;${eclipse_home}plugins\gwt-2.5.0.rc1\gwt-2.5.0.rc1\gwt-dev.jar;${workspace_loc:\GWTFractionTest\war\WEB-INF\lib\gwtquery-1.1.0.jar};${eclipse_home}plugins\gwt-2.5.0.rc1\gwt-2.5.0.rc1\gwt-codeserver.jar" com.google.gwt.dev.codeserver.CodeServer -src "${workspace_loc:\GWTFractionTest\src}" com.conceptua.fractiontest.FractionTest

6)选择“运行”按钮以运行CodeServer。当我在控制台中执行此操作时;

workDir: C:\Users\Ezward\AppData\Local\Temp\gwt-codeserver-6942784883227417581.tmp
binding: user.agent=safari
binding: compiler.useSourceMaps=true
binding: locale=en
Compiling module com.conceptua.fractiontest.FractionTest
   Validating units:
      Ignored 72 units with compilation errors in first pass.
Compile with -strict or with -logLevel set to TRACE or DEBUG to see all errors.
   Computing all possible rebind results for 'com.google.gwt.useragent.client.UserAgentAsserter'
      Rebinding com.google.gwt.useragent.client.UserAgentAsserter
         Checking rule <generate-with class='com.google.gwt.editor.rebind.SimpleBeanEditorDriverGenerator'/>
            [WARN] Detected warnings related to 'com.google.gwt.editor.client.SimpleBeanEditorDriver'.   Are validation-api-<version>.jar and validation-api-<version>-sources.jar on the classpath?
            Specify -logLevel DEBUG to see all errors.
            [WARN] Unknown type 'com.google.gwt.editor.client.SimpleBeanEditorDriver' specified in deferred binding rule
   Compiling 1 permutation
      Compiling permutation 0...
      Source Maps Enabled
   Compile of permutations succeeded
Linking into C:\Users\Ezward\AppData\Local\Temp\gwt-codeserver-6942784883227417581.tmp\com.conceptua.fractiontest.FractionTest\compile-1\war\fractiontest; Writing extras to C:\Users\Ezward\AppData\Local\Temp\gwt-codeserver-6942784883227417581.tmp\com.conceptua.fractiontest.FractionTest\compile-1\extras\fractiontest
   Link succeeded
   Compilation succeeded -- 58.257s
Compile completed in 60831 ms
2012-07-01 12:37:03.184::INFO:  Logging to STDERR via org.mortbay.log.StdErrLog
2012-07-01 12:37:03.185::INFO:  jetty-6.1.x

The code server is ready.
Next, visit: http://localhxst:9876/
2012-07-01 12:37:03.274::INFO:  Started SelectChannelConnector@127.0.0.1:9876

我不知道为什么我得到最初的'72单位有编译错误',但它似乎继续成功编译并运行服务器。

7)此时,您应该将指定的CodeServer网址输入Chrome。您将获得一个指示CodeServer正在运行的页面,您可以将书籍标记拖动到书签工具栏;

GWT Code Server
Drag these two bookmarklets to your browser's bookmark bar:
Dev Mode On Dev Mode Off
Visit a web page that uses one of these modules:
fractiontest
Click "Dev Mode On" to start development mode.

8)下一步是访问你的html文件来运行它。它显然需要由一个单独的网络服务器提供服务。我还在努力工作。

答案 1 :(得分:2)

this可能是您问题的根源吗? “当您使用-jar选项时,JAR文件是所有用户类的源,并忽略其他用户类路径设置。”

答案 2 :(得分:2)

我浪费了很多时间试图让它发挥作用。我试图遵循美妙的Ezward指令,但我的设置可能有所不同,它对我不起作用。有许多移动的碎片,任何错误都会导致大量的NullPointer,StackOverflow和UnableToComplete异常。

我在http://blog.daniel-kurka.de/2012/07/mgwt-super-dev-mode.html(Daniel Kurka博客)找到的唯一一套适用于我的说明。希望它能帮助像我一样坚持使用GWT Super Dev Mode的其他人。

答案 3 :(得分:1)

您可以像以下一样使用它。

java -cp ".:/sdk/gwt-2.5.0.rc1/gwt-dev.jar:/sdk/gwt-2.5.0.rc1/gwt-codeserver.jar" com.activegrade.TeacherView

答案 4 :(得分:1)

有同样的问题。这对我有所帮助:

java -cp "./gwt-codeserver.jar:./gwt-dev.jar" com.google.gwt.dev.codeserver.CodeServer

您可以添加--help:

java -cp "./gwt-codeserver.jar:./gwt-dev.jar" com.google.gwt.dev.codeserver.CodeServer --help

输出:

CodeServer [-bindAddress address] [-port port] [-workDir dir] [-src dir] [module]

where 
  -bindAddress  The ip address of the code server. Defaults to 127.0.0.1.
  -port         The port where the code server will run.
  -workDir      The root of the directory tree where the code server willwrite compiler output. If not supplied, a temporary directorywill be used.
  -src          A directory containing GWT source to be prepended to the classpath for compiling.
and 
  module        The GWT modules that the code server should compile. (Example: com.example.MyApp)

然后只需设置-src目录和模块名称

答案 5 :(得分:1)

除了gwt-dev.jar之外,我还可以通过在类路径中添加gwt-user.jar来解决这个问题。 GWT超级开发模式instructions表示您可能需要添加gwt-user.jar。