我非常恼火不得不问这个,但我不能让它起作用。目前我有一个项目:
src /文件夹中的5个类
2 JARS命名为profiles.jar和 根文件夹中的classifier.jar
我想创建一个“makefile?”还是“批处理文件?”编译并运行这些类从WINDOWS命令行,但首先将jar添加到buildpath?我不知道我怎么回事这个
当我尝试这样做时,它表示找不到类,很可能是因为我没有正确地将jar添加到构建路径中。在命令提示符下运行此命令需要使用哪些命令?
由于 菲利普
修改
感谢您的帮助,我有很多麻烦让它工作 目前我有一个项目,在src文件夹中有5个类,在jar文件夹中有2个罐子
这是命令 我在跑步:
组 CLASSPATH = C:\ WAMP \ WWW \新闻\ UserProfiling \罐\ classifier.jar ; C:\瓦帕\ WWW \消息\ UserProfiling \罐子\ profiles.jar
然后从根文件夹,我正在运行:
javac src / * .java
然后:
java -cp ./src:./jars/* SRC /相互作用
交互是主要的类,我得到了各种各样的noclassfound错误,我做错了什么? 非常感谢菲利普
错误
java -cp ./src:./jars/*交互 线程“main”中的异常 java.lang.NoClassDefFoundError: 引起的互动: 抛出java.lang.ClassNotFoundException: 相互作用 在java.net.URLClassLoader $ 1.run(未知 资源) 在java.security.AccessController.doPrivileged(Native 方法) 在java.net.URLClassLoader.findClass(未知 资源) 在java.lang.ClassLoader.loadClass(未知 资源) 在sun.misc.Launcher $ AppClassLoader.loadClass(未知 资源) 在java.lang.ClassLoader.loadClass(未知 资源) 在java.lang.ClassLoader.loadClassInternal(未知 来源)无法找到主类: 相互作用。程序将退出。
答案 0 :(得分:5)
在早于或等于Java版本5的版本中,您必须在类路径上单独指定每个jar以及源的根目录,例如
java -cp a.jar:b.jar:c.jar:./src MainClass
在版本6中,您可以使用通配符作为jar。例如
java -cp ./src:* MainClass
但将你的罐放入子目录可能更清洁,例如。
java -cp ./src:./jars/* MainClass
基本上,你的makefile或start脚本需要构建一个像上面那样的命令。
更多信息 - Sun docs (v6)
更新 - 为了响应您的第二次编辑,您需要指定完整的主类名,因此如果该类位于名为“com.mypackage.MainClass”的包中,那么您需要执行:
java -cp ./src:./jars/* com.mypackage.MainClass
我还建议在使整个脚本运行之前,先将命令作为独立命令运行。通过移除移动部件,调试速度更快,更容易看到发生了什么。
答案 1 :(得分:1)
答案 2 :(得分:1)
关于你的第二个问题:如果你使用
java -cp ./src:./jars/* src/Interaction
它将尝试启动不存在的类src / Interaction。 src已经在你的类路径中,所以你只需要做
java -cp ./src:./jars/* Interaction
答案 3 :(得分:0)
我认为找到了你的问题。
javac src / * .java
java -cp ./src:./jars/* src / Interaction
这个问题困扰了许多初学者:你需要从源树开始的目录运行javac和java。在您的情况下,该目录是src
。由于src
未出现在您的包名中,因此它也不应出现在您的编译/执行路径中。
所以你应该
cd UserProfiling/src
并运行
javac *.java
和
java -cp .:../jars Interaction
从那里开始。