如何使用命令行从指定了类路径的jar运行类

时间:2011-05-05 00:22:48

标签: java jar classpath executable-jar noclassdeffounderror

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

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

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.

有人可以告诉我应该运行什么确切的命令吗?

2 个答案:

答案 0 :(得分:8)

尝试:

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

提供从pyProj Import.jar

所在目录运行它

答案 1 :(得分:2)

如果指定了-jar选项,则忽略任何其他类路径选项。所以这不起作用:

java -jar MyJar.jar -classpath foo.jar

但是如果你把foo.jar名字放在MyJar.jar中的META-INF / manifest.mf中:

Class-Path: foo.jar

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

有时我只是解压缩所有依赖的JAR并将其内容打包到MyJar.jar中。通过这种方式减少依赖性。