我正在尝试为BlueJ制作扩展程序(这是为初学者设计的免费Java Development Environment
)。扩展应该帮助我们学校的一年级学生。
扩展名必须是JAR文件,我必须将其放在BlueJ
可以在runtime
加载的文件夹中。我已编写的扩展名可以从那里加载,并且没有任何问题。
现在为什么,对于这个问题:
我想整合checkstyle(这是一个开发工具,以帮助程序员编写符合编码标准的Java代码。)到我的扩展中。所以我将checkstyle jar
放在我的项目中,并尝试在我的代码中使用这个库。如果我现在生成一个jar并将我的扩展名复制到BlueJ
文件夹并从eclipse中启动BlueJ
,我会收到以下错误:
java.lang.NoClassDefFoundError: com / puppycrawl / tools / checkstyle / api / CheckstyleException at ch.ntb.sir.ntbbluejextension.NtbBlueJExtension.startup(NtbBlueJExtension.java:79) 在 bluej.extmgr.ExtensionWrapper.safeStartup(ExtensionWrapper.java:533) 在 bluej.extmgr.ExtensionWrapper.newExtension(ExtensionWrapper.java:209) 在 bluej.extmgr.ExtensionsManager.loadDirectoryExtensions(ExtensionsManager.java:164) 在 bluej.extmgr.ExtensionsManager.loadExtensions(ExtensionsManager.java:100) 在 bluej.extmgr.ExtensionsManager.getInstance(ExtensionsManager.java:61) 在bluej.Main。(Main.java:101)at sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:422) 在java.lang.Class.newInstance(Class.java:442)at bluej.Boot.bootBluej(Boot.java:348)at bluej.Boot.main(Boot.java:175) 引起:java.lang.ClassNotFoundException:com.puppycrawl.tools.checkstyle.api.CheckstyleException at at java.net.URLClassLoader.findClass(URLClassLoader.java:381)at java.lang.ClassLoader.loadClass(ClassLoader.java:424)at java.lang.ClassLoader.loadClass(ClassLoader.java:357)... 14更多
在NtbBlueJExtension.java:79
进行初始化:
`codeAnalysisHandler = new CodeAnalysisHandler();`
在CodeAnalysisHandler
课程中,我从checkstyle libraries
:
import com.puppycrawl.tools.checkstyle.Checker;
import com.puppycrawl.tools.checkstyle.ConfigurationLoader;
import com.puppycrawl.tools.checkstyle.PropertiesExpander;
import com.puppycrawl.tools.checkstyle.TreeWalker;
import com.puppycrawl.tools.checkstyle.api.AuditEvent;
import com.puppycrawl.tools.checkstyle.api.AuditListener;
import com.puppycrawl.tools.checkstyle.api.CheckstyleException;
import com.puppycrawl.tools.checkstyle.api.Configuration;
我的第一个问题是,我应该找到问题的原因吗?但后来我不知道要搜索什么以及如何解决它。
我在eclipse的项目属性中添加了jar。
Jar位于我的lib
文件夹中的项目结构内。 BlueJ
从“lib”文件夹加载bluejext.jar
没有问题。 bluejext.jar
来自BlueJ
,需要为BlueJ编写扩展程序。
我有这个清单文件:
Manifest-Version: 1.0
Main-Class: ch.ntb.sir.ntbbluejextension.NtbBlueJExtension
Class-Path: lib/bluejext.jar lib/checkstyle-all.jar
我试图谷歌它,但发现了大部分信息,找到原因是多么困难。
编辑1:
我解压缩了我的JAR文件,如果checkstyle-all.jar
确实位于我的扩展程序中,那么我找到了一个文件.classpath
:
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
<classpathentry kind="lib" path="lib/bluejext.jar"/>
<classpathentry kind="lib" path="lib/checkstyle-all.jar"/>
<classpathentry kind="output" path="bin"/>
</classpath>
解: 使用带有fat jar plugin的Eclipse Kepler(Neon对于插件来说是新的)并使用'Build Fat Jar'导出项目。之后,'java.lang.ClassNotFoundException'不再出现了。
感谢您的帮助。