【问题标题】:How to run a class from a jar with from command-line with classpath specified如何使用指定类路径的命令行从 jar 中运行类
【发布时间】:2011-05-05 00:22:48
【问题描述】:

我正在尝试从 JAR 运行一个类。这个类不是这个 jar 中唯一的主要类。此外,它还需要许多其他 jar 文件,我将它们保存在与此 Jar 相同的目录中。我试过的命令如下:

(mydir是我所有jar所在的目录,使用Windows平台)

mysql-connector-java-5.1.13-bin.jar 需要myProjImport.jar 才能运行,com.mycomp.myProj.importer.csv.TestImporter 是我要运行的类。 "C:\Documents and Settings\user\workspace\myProjImport\src\conf\datasource.properties""C:\temp\apollo_claims_test.txt" 是类 TestImporter 所需的命令行参数 这是我尝试过的:

mydir>java -cp C:\temp\test_myProj\mysql-connector-java-5.1.13-bin.jar;. myProjImport.jar com.mycomp.myProj.importer.csv.TestImporter "C:\Documents and Settings\user\workspace\myProjImport\src\conf\datasource.properties" "C:\temp\apollo_claims_test.txt"

这是错误:

Exception in thread "main" java.lang.NoClassDefFoundError: myProjImport/jar
Caused by: java.lang.ClassNotFoundException: myProjImport.jar
        at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
Could not find the main class: myProjImport.jar.  Program will exit.

谁能告诉我应该运行什么命令?

【问题讨论】:

    标签: java jar classpath executable-jar noclassdeffounderror


    【解决方案1】:

    试试:

    java -cp C:\temp\test_myProj\mysql-connector-java-5.1.13-bin.jar;myProjImport.jar com.mycomp.myProj.importer.csv.TestImporter "C:\Documents and Settings\user\workspace\myProjImport\src\conf\datasource.properties" "C:\temp\apollo_claims_test.txt"

    提供您从与 myProjImport.jar 相同的目录运行它

    【讨论】:

    • 正确的想法,将 myProjImport.jar 添加到类路径中。但在 Windows 上使用 ; 分隔符。
    • opps 在这种情况下:java -cp C:\temp\test_myProj\mysql-connector-java-5.1.13-bin.jar;myProjImport.jar com.mycomp.myProj.importer.csv。 TestImporter "C:\Documents and Settings\user\workspace\myProjImport\src\conf\datasource.properties" "C:\temp\apollo_claims_test.txt
    • 感谢 Karthik 和 ykaganovich,您的解决方案有效。 Karthik,请按照 ykaganovich 的建议进行更正-';'而不是 ':' 因为这是针对 Windows 平台的。
    【解决方案2】:

    指定 -jar 选项时,将忽略任何其他类路径选项。所以这行不通:

    java -jar MyJar.jar -classpath foo.jar
    

    但是如果你将 foo.jar 名称放入 MyJar.jar 中的 META-INF/manifest.mf:

    Class-Path: foo.jar
    

    然后 foo.jar 将在与 MyJar.jar 相同的级别进行搜索,即在同一目录中。

    有时我只是解压缩所有依赖的 JAR 并将它们的内容打包到 MyJar.jar 中。这样可以减少依赖。

    【讨论】:

    • 添加“Class-Path mysql-connector-java-5.1.13-bin.jar”行后,出现此错误:“无效或损坏的jarfile myProjImport.jar”
    • 我不想对java bashing感到内疚,但为什么呢?为什么?为什么?运行 jar 时可以不指定额外的类路径吗??
    猜你喜欢
    • 2013-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-13
    • 2012-07-12
    • 1970-01-01
    相关资源
    最近更新 更多