7

私は.NET開発者ですが、現在のプロジェクトでは、JavaプロジェクトであるGoogleCajaを使用する必要があります。ええとああ!

Windowsマシンでhttp://code.google.com/p/google-caja/wiki/RunningCajaのガイドに従いましたが、プログラムを実行できません。彼らが提案するコマンドラインが機能しなかったので、私はant-jarsディレクトリにcdして、plugin.jarを実行しようとしました。

D:\java\caja\svn-changes\pristine\ant-jars>java -cp . -jar pluginc.jar -i test.htm
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/cli/ParseException
        at com.google.caja.plugin.PluginCompilerMain.<init>(PluginCompilerMain.java:78)
        at com.google.caja.plugin.PluginCompilerMain.main(PluginCompilerMain.java:368)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.cli.ParseException
        at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
        ... 2 more

それはどうですか?

test.htmの代わりにfile:/// d:/java/caja/svn-changes/pristine/ant-jars/test.htmも試しました。ソースを見ると、ファイルパラメータはURIであるようです...

また、plugincでIKVMを実行して、Javaについて心配しないようにしましたが、ClassDefNotFoundExceptionも発生しました...

ありがとう!

編集:これまでの助けをみんなに感謝します:)まだ立ち往生しています。頑張ってください。これは、.net開発者が美しいOSSテクノロジーに切り替えることの始まりかもしれません。

d:\java\caja\svn-changes\pristine\ant-jars>java -cp .\*.* com.google.caja.plugin.PluginCompilerMain 
=> NoClassDefFoundError: /\commons-cli/jar

D:\java\caja\svn-changes\pristine\ant-jars>java -cp .\*.*;..\third_party\java\jakarta_commons\*.* com.google.caja.plugin.PluginCompilerMain
=> Could not find the main class: com.google.caja.plugin.PluginCompilerMain

build.xmlファイルのコードを指定して実行する方法はありますか?

4

4 に答える 4

11

Javaはorg.apache.commons.cli.ParseExceptionクラスを読み込もうとしていますが、見つかりません。これは、クラスパスが正しく設定されていないことを示しています。

その特定のクラスはApacheCommonsCLIライブラリからのものであるため、cli.jarやcommons-cli.jarなどの名前のjarを探してください。別のlibディレクトリにある可能性があります。同じ場所に他のjarファイルがある場合は、おそらくそれらも追加する必要があります。

編集:build.xmlファイルを見ると、次のクラスパスが使用されています。

  <path id="classpath.web">
    <pathelement path="${third_party}/java/jsdk2.1/servlet.jar"/>
    <pathelement path="${third_party}/java/jaf/activation.jar"/>
    <pathelement path="${third_party}/java/javamail/mail.jar"/>
    <pathelement path="${third_party}/java/jetty/lib/jetty.jar"/>
    <pathelement path="${third_party}/java/jetty/lib/jetty-util.jar"/>
  </path>
  <path id="classpath.compile">
    <path refid="classpath.web"/>
    <pathelement path="${third_party}/java/jakarta_commons/commons-cli.jar"/>
    <pathelement path="${third_party}/java/json_simple/json_simple.jar"/>
    <pathelement path="${third_party}/java/rhino/js.jar"/>
    <pathelement path="${third_party}/java/xerces/xercesImpl.jar"/>
    <pathelement path="${jars}/htmlparser.jar"/>
  </path>
  <path id="classpath.run">
    <pathelement path="${lib}"/>
    <path refid="classpath.compile"/>
  </path>

cpしたがって、 javaを呼び出すときは、これらのjarをすべて引数に含める必要があります。

編集#2:Ashが指摘したように、とは使用できないため、クラスパスにもを配置し-cp、メインクラスを手動で指定する必要があります(so )。これらすべてを手動で行うよりも、アリを機能させる方がおそらく簡単でしょう;)-jarpluginc.jarjava -cp ...;pluginc.jar com.google.classname -i etc

于 2010-05-19T12:04:56.103 に答える
6

-jarこのオプションを使用すると、他のすべてのCLASSPATH設定が無視されることにも注意してください。見るhttp://java.sun.com/javase/6/docs/technotes/tools/windows/java.html

このオプションを使用すると、JARファイルがすべてのユーザークラスのソースになり、他のユーザークラスパス設定は無視されます。

于 2010-05-19T12:07:00.617 に答える
0

これを試して

java -classpath .;%classpath%; -jar pluginc.jar -i test.htm
于 2010-05-19T12:04:37.017 に答える
0

ApacheCommonsライブラリへのパスをCLASSPATHに配置する必要があるようです。

于 2010-05-19T12:06:03.783 に答える