为什么在使用 -jar 选项时,-cp 没有任何效果?

huangapple go评论131阅读模式
英文:

why -cp has no effect when used with -jar option?

问题

我使用以下命令启动我的应用程序 java -cp 依赖Jar路径 -jar MyJar.jar。但它找不到依赖Jar中的类,导致了 java.lang.NoClassDefFoundError 错误。然后我在我的代码中打印了类路径,发现依赖Jar路径并未出现在类路径中。于是我将依赖Jar路径添加到我的Jar文件的 MANIFEST.MF 中的 Class-Path 头部,并使用 java -jar MyJar.jar 启动我的应用程序,这样就正常工作了。

因此,我的问题是,当同时使用 -cp-jar 时,-cp 是否会生效?如果不生效,除了设置 Class-Path 头部之外,我如何在运行我的Jar文件时设置类路径?

英文:

I launch my application with java -cp dependencyJarPath -jar MyJar.jar. But it can not find the class in my dependencyJar and gives me java.lang.NoClassDefFoundError . Then I print the classpath in my code and find that dependencyJarPath is not on my classpath. Then I add the dependencyJarPath in the Class-Path header in the MANIFEST.MF of my jar and launch my application with java -jar MyJar.jar, it worked.

So my question is when use -cp and -jar toghter, will -cp take effect? If it does not take effect, how could I set the classpath when running my jar other than set the Class-Path header?

答案1

得分: 2

根据这个链接:
http://docs.oracle.com/javase/7/docs/technotes/tools/windows/java.html
>"当您使用此选项时,JAR 文件是所有用户类的源,而忽略其他用户类路径设置。"

如果您不介意在启动应用程序时指定启动类,您可以将您的 JAR 文件添加到类路径并像这样启动它。

java -cp dependencyPath;MyJar.jar My.StartUpClass

英文:

according to this:
http://docs.oracle.com/javase/7/docs/technotes/tools/windows/java.html
>"When you use this option, the JAR file is the source of all user classes, and other user class path settings are ignored."

if you don't mind specifiying the startup class on launching the application, you can add your jar to the classpath and start it like that.

java -cp dependencyPath;MyJar.jar My.StartUpClass

huangapple
  • 本文由 发表于 2020年10月15日 21:27:31
  • 转载请务必保留本文链接:https://go.coder-hub.com/64372626.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定