【问题标题】:Add Jar File to Buildpath in Windows Command Line在 Windows 命令行中将 Jar 文件添加到 Buildpath
【发布时间】:2010-12-27 05:38:42
【问题描述】:

我对不得不问这个问题感到非常恼火,但我无法让它发挥作用。目前我有一个项目:

src/ 文件夹中的 5 个类

2 个名为 profiles.jar 的 JARS 和 根目录下的classifier.jar

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

当我尝试这样做时,它说找不到该类,很可能是因为我没有正确地将 jar 添加到构建路径中。在命令提示符下运行它需要使用哪些命令?

谢谢 菲利普

编辑

感谢您的帮助,我在让它工作时遇到了很多麻烦 目前我有一个项目,在 src 文件夹中有 5 个类,在 jar 文件夹中有 2 个 jars

这里是命令 我正在运行:

设置 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/交互

交互是主要课程,我得到各种 noclassfound 错误,我做错了什么吗? 非常感谢菲利普

错误

java -cp ./src:./jars/* 交互 线程“主”中的异常 java.lang.NoClassDefFoundError: 互动原因: java.lang.ClassNotFoundException: 相互作用 在 java.net.URLClassLoader$1.run(未知 资源) 在 java.security.AccessController.doPrivileged(本机 方法) 在 java.net.URLClassLoader.findClass(未知 资源) 在 java.lang.ClassLoader.loadClass(未知 资源) 在 sun.misc.Launcher$AppClassLoader.loadClass(未知 资源) 在 java.lang.ClassLoader.loadClass(未知 资源) 在 java.lang.ClassLoader.loadClassInternal(未知 来源)找不到主类: 相互作用。程序将退出。

【问题讨论】:

  • Interaction 在什么包中? (我希望像 com.bla.Interation 这样的东西)
  • 你得到的错误是由于没有使用完整的主类名,它必须包含包。因此,您需要像 'com.x.y.Interation' 这样的东西,而不是 'Interation'
  • 原来它是在默认包中,因为它是一个非常小的程序,但后来我尝试将它放在一个名为 test 的包中并运行:java -cp ./src:./jars/* UserProfiling.Test.Interaction (UserProfiling 是我项目的名称对吗?)但我仍然遇到同样的错误
  • 我注意到您一直提到“src”,这显然是您的 Java 源代码所在的位置。但是 CP 需要指出编译后的 .class 文件在哪里!他们也在src吗?此外,在您之前的评论中,“test”的大小写不同。

标签: java command-line makefile compilation


【解决方案1】:

发现你的问题,我想。

javac src/*.java

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

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

所以你应该

cd UserProfiling/src 

然后运行

javac *.java 

java -cp .:../jars Interaction 

从那里开始。

【讨论】:

    【解决方案2】:

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

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

    在版本 6 中,您可以对 jar 使用通配符,例如

    java -cp ./src:* MainClass
    

    但将您的 jar 放入子目录可能会更干净,例如

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

    所以基本上,您的 makefile 或启动脚本需要构造一个类似上述命令的命令。

    更多信息 - Sun docs (v6)

    更新 - 为了响应您的第二次编辑,您需要指定完整的主类名称,因此如果该类位于名为“com.mypackage.MainClass”的包中,那么您需要执行:

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

    我还建议先将该命令作为独立命令运行,然后再运行整个脚本。通过移除移动部件,可以更快地进行调试,并且更容易查看发生了什么。

    【讨论】:

    • 感谢您的帮助,我在让它工作时遇到了很多麻烦目前我有一个项目,在 src 文件夹中有 5 个类,在 jar 文件夹中有 2 个 jar 以下是我正在运行的命令:设置 CLASSPATH=C:\wamp\www\news\UserProfiling\jars\classifier.jar ;C:\wamp\www\news\UserProfiling\jars 然后从根文件夹,我运行:javac src/*.java 然后:java -cp ./src:./jars/* src/Interaction 交互是主类,我得到各种 noclassfound 错误,我做错了吗?非常感谢菲利普
    【解决方案3】:

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

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

    它将尝试启动不存在的类 src/Interaction。 src 已经在你的类路径中,所以你只需要这样做

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

    【讨论】:

    • 谢谢,仍然遇到同样的错误。添加到问题描述
    【解决方案4】:

    我建议你看看antmaven。 Ant 是一个解决方案,可以非常简单地完成您想做的事情,maven 没有那么简单,但在管理依赖项方面有其优势。

    【讨论】:

    • 我猜 maven 的蚂蚁对于 Phil 想做的事情来说太过分了,这可能只是一项一次性的任务。但是,是的,长期值得关注......
    • ant 的设置和使用相当简单,并且拥有一个项目文件可以轻松重复该过程和/或更改/扩展它。另一方面,maven 是......好吧,我宁愿避免它。
    猜你喜欢
    • 1970-01-01
    • 2016-12-05
    • 1970-01-01
    • 1970-01-01
    • 2014-11-30
    • 1970-01-01
    • 2015-08-07
    • 1970-01-01
    • 2011-03-10
    相关资源
    最近更新 更多