Я - разработчик.NET, но для моего текущего проекта я должен использовать Google Caja, проект Java. Мм о!
Я следовал руководству по http://code.google.com/p/google-caja/wiki/RunningCaja на моей машине окон, но не могу заставить программу работать. Командная строка, которую они предлагают, не работала, таким образом, я cd'd в каталог банок муравья и попробованный для выполнения 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.(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
О чем то, что все?
Я также попробовал file:///d:/java/caja/svn-changes/pristine/ant-jars/test.htm вместо test.htm. Смотря на источник, кажется, что параметрическим усилителем файла является Uri...
Я также попытался выполнить IKVM на pluginc и затем не вызвать беспокойство о 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?
Java пытается загрузить класс org.apache.commons.cli.ParseException, но не может его найти. Это говорит о том, что вы неправильно настроили путь к классам.
Этот конкретный класс взят из библиотеки CLI Apache Commons, так что поищите там банку с именем вроде cli.jar или commons-cli.jar. Он может находиться в отдельном каталоге lib
. Если в том же месте есть другие банки, вам, вероятно, придется их добавить.
Изменить: глядя на файл 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>
Таким образом, вам нужно включить все эти jar-файлы в аргумент cp
при вызове java.
Правка №2: Как указал Эш, вы не можете использовать -cp
с -jar
, поэтому вам нужно будет поместить pluginc.jar
в пути к классам и вручную укажите основной класс (так java -cp ...; pluginc.jar com.google.classname -i etc
).Наверное, было бы проще заставить муравья работать, чем делать все это вручную;)
Попробовать
java -classpath .;%classpath%; -jar pluginc.jar -i test.htm
Также обратите внимание, что при использовании параметра -jar
все остальные настройки CLASSPATH игнорируются. См. http://java.sun.com/javase/6/docs/technotes/tools/windows/java.html :
Когда вы используете эту опцию, файл JAR является источником всех классы пользователей и другие параметры пути к классам пользователей игнорируются.
Похоже, вам нужно указать путь к библиотеке ApacheCommons в свой CLASSPATH .