2009-12-16 88 views
4

我很烦恼不得不问这个问题,但是我不能让它工作。目前我有一个项目:在Windows命令行中将Jar文件添加到构建路径

5 Classes in the src/ folder

2 JARS named profiles.jar and classifier.jar in the root folder

我想创建一个“makefile?”或“批处理文件?”编译并运行这些类从WINDOWS命令行,但首先将jar添加到构建路径?我不知道我怎么去

当我尝试这样做时,它说该类没有找到,很可能是由于我没有正确添加jar到构建路径。我需要用什么命令在命令提示符下运行这个命令?

感谢 菲利普

编辑

感谢您的帮助,有很多的麻烦林它寿 工作,目前,我有一个项目,有5类src文件夹中,和2瓶在JAR文件夹

下面是命令 进出口运行:

set CLASSPATH=C:\wamp\www\news\UserProfiling\jars\classifier.jar ;C:\wamp\www\news\UserProfiling\jars\profiles.jar

然后从根文件夹,进出口运行:

javac src/*.java

然后:

java -cp ./src:./jars/* src/Interaction

互动是主类,即时得到各种noclassfound错误的,我做错了什么? 非常感谢菲利普

的错误

java -cp ./src:./jars/* Interaction Exception in thread "main" java.lang.NoClassDefFoundError: Interaction Caused by: java.lang.ClassNotFoundException: Interaction 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) at java.lang.ClassLoader.loadClassInternal(Unknown Source) Could not find the main class: Interaction. Program will exit.

+0

交互是什么包? (我期望像com.bla.Interation一样) – Joel 2009-12-16 13:41:59

+0

你得到的错误是从不使用完整的主类名,它必须包括包。因此,而不是'互动',你需要像'com.xyInteration' – Joel 2009-12-16 13:43:55

+0

原来,它是在默认包,因为它是一个非常小的程序,但后来我试着把它放在一个名为测试和运行包: java -cp ./src:./jars/* UserProfiling.Test.Interaction (UserProfiling是我的项目名称是这样吗?)但我仍然得到了同样的错误 – Phil 2009-12-16 13:48:00

回答

5

在早于或等于Java版本5的版本中,您必须在您的类路径中分别指定每个jar以及源代码的根目录,例如

java -cp a.jar:b.jar:c.jar:./src MainClass 

在版本6中,您可以使用通配符作为罐子,例如,

java -cp ./src:* MainClass 

但它可能更清洁将您的罐子放入子目录中,例如

java -cp ./src:./jars/* MainClass 

因此,基本上,您的makefile或启动脚本需要构建一个像上述之一的命令。

更多信息 - Sun docs (v6)

更新 - 响应你的第二个编辑,你需要指定完整的主类名,所以如果类是在一个名为“com.mypackage.MainClass包“那么你需要做的:

java -cp ./src:./jars/* com.mypackage.MainClass 

我也建议得到命令工作作为一个独立的命令第一,获得运行整个脚本之前。通过移除移动部件,调试将更快,并且更容易查看正在发生的事情。

+0

感谢您的帮助,即时通讯有越来越麻烦了很多它寿 工作,目前,我有5班src文件夹中,和2罐罐子里的文件夹 下面的一个项目是命令进出口运行: 集CLASSPATH = C:\ wamp \ www \ news \ UserProfiling \ jars \ classifier.jar; C:\ wamp \ www \ news \ UserProfiling \ jars 然后从根文件夹中运行: javac src/* .java Then: java -cp ./src:./jars/* src/Interaction Interaction是主类,我得到各种noclass发现的错误,我在做什么错了吗? 非常感谢 菲利普 – Phil 2009-12-16 13:31:24

+0

添加到主要问题与格式 – Phil 2009-12-16 13:33:15

1

我建议你看一看antmaven。 Ant是一个解决方案,可以非常简单地执行你想要做的事情,maven并不是那么直截了当,但在管理依赖关系方面却有其优势。

+0

我猜测maven的蚂蚁对于Phil想要做的事情是过度的,这可能只是一个一次性的任务。但是,是的,长期值得期待...... – Joel 2009-12-16 13:02:01

+0

ant的设置和使用相当简单,并且有一个项目文件可以轻松地重复该过程和/或更改/扩展它。另一方面,maven是......呃,我宁愿避免它。 – 2009-12-16 13:29:05

+2

+1避免maven。这就像魔鬼产卵。 – Joel 2009-12-16 13:37:56

1

关于你的第二个问题:如果你使用

java -cp ./src:./jars/* src/Interaction 

它会尝试启动类的src /相互作用,这不存在。 src已经在你的类路径中,所以你只需要做

java -cp ./src:./jars/* Interaction 
+0

谢谢,仍然得到相同的错误寿。添加到问题描述中 – Phil 2009-12-16 13:40:47

0

发现你的问题,我想。

javac src/*.java

java -cp ./src:./jars/* src/Interaction

这个问题困扰着很多初学者:你需要从目录运行javac和java在您的源代码树开始。在你的情况下,该目录是src。由于src未出现在您的软件包名称中,因此它也不应出现在您的编译/执行路径中。

所以,你应该

cd UserProfiling/src 

,并从那里运行

javac *.java 

java -cp .:../jars Interaction