我之前从未使用过任何第三方库。下载jfreechart-1.0.14.tar.gz
后我该怎么办?
我不知道我是否正确地做这些事情:
1.将jcommon-1.0.17.jar
和jfreechart-1.0.14.jar
放在与我的源代码相同的目录中
2.在源代码中导入所需的类(例如import org.jfree.util.Rotation;
)
许多文章都告诉您如何在IDE中执行此操作。但是我没有使用IDE,而是用vim编写代码并自己编译。所以,假设我没有做任何错误,我应该如何使用javac
编译源代码并使用java
运行代码?
编辑:
这是我的文件布局:
./src
| - test.java
./lib
| - jcommon-1.0.17.jar
| - jfreechart-1.0.14.jar
我编译
javac -cp "lib/*" -d classes/ src/test.java
然后由
java -cp classes:lib/jcommon-1.0.17.jar:jfreechart-1.0.14.jar test
但是,会发生一些错误:
线程“main”中的异常java.lang.NoClassDefFoundError:org / jfree / data / general / PieDataset
如何解决此问题?
Exception in thread "main" java.lang.NoClassDefFoundError: org/jfree/data/general/PieDataset
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
at java.lang.Class.getMethod0(Unknown Source)
at java.lang.Class.getMethod(Unknown Source)
at sun.launcher.LauncherHelper.getMainMethod(Unknown Source)
at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)
Caused by: java.lang.ClassNotFoundException: org.jfree.data.general.PieDataset
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 6 more
答案 0 :(得分:1)
库不应与源代码位于同一位置。如果您不想使用像Gradle那样的构建工具,它会处理您的库依赖项,那么我建议使用以下布局:
project
src
.java files here, organized in a folder tree matching the package tree
classes
compiled .class files here
lib
.jar files here
要编译,请进入项目目录并执行以下命令:
javac -cp lib/jfreechart-1.0.14.jar:lib/jcommon-1.0.17.jar -d classes src/com/foo/bar/MyClass.java src/com/foo/bar/MyOtherClass.java
要运行您的应用,请执行以下命令:
java -cp classes:lib/jfreechart-1.0.14.jar:lib/jcommon-1.0.17.jar com.foo.bar.MyClass