2

I am trying to run a class from a JAR. This class is NOT the only main class in this jar. Also, it requires number of other jar files, which I have kept in the same directory as this Jar. The commands I have tried are as follows:

(mydir is the directory in which all of my jars are located, using Windows platform)

mysql-connector-java-5.1.13-bin.jar is needed for myProjImport.jar to run and com.mycomp.myProj.importer.csv.TestImporter is the class i am trying to run. "C:\Documents and Settings\user\workspace\myProjImport\src\conf\datasource.properties" and "C:\temp\apollo_claims_test.txt" are the command line arguments required by the class TestImporter Here is what I have tried:

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"

And here is the error:

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.

Can someone please tell me what exact command should I run?

Bhushan
  • 18,329
  • 31
  • 104
  • 137

2 Answers2

8

try:

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"

provided your running this from the same direcotry as myProjImport.jar

Karthik Ramachandran
  • 11,925
  • 10
  • 45
  • 53
  • 4
    Right idea, add myProjImport.jar to the classpath. But use `;` separator on Windows. – ykaganovich May 05 '11 at 00:36
  • 1
    opps in that case: 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 Ramachandran May 05 '11 at 00:38
  • 1
    Thanks Karthik and ykaganovich, your solution works. Karthik, please make the correction which ykaganovich has suggested- ';' instead of ':' since this is for Windows platform. – Bhushan May 05 '11 at 00:49
2

When -jar option is specified, any other class path options are ignored. So this won't work:

java -jar MyJar.jar -classpath foo.jar

But if you place foo.jar name into META-INF/manifest.mf within MyJar.jar:

Class-Path: foo.jar

Then the foo.jar will be searched on the same level as MyJar.jar, i.e. in the same directory.

Sometimes I just unpack all dependent JARs and pack their content into MyJar.jar. Fewer dependencies this way.

Vladimir Dyuzhev
  • 18,130
  • 10
  • 48
  • 62
  • After adding the line "Class-Path mysql-connector-java-5.1.13-bin.jar", I got this error: "Invalid or corrupt jarfile myProjImport.jar" – Bhushan May 05 '11 at 00:40
  • I don't want to be guilty of java bashing, but why? why? why? can I not specify extra class paths when running a jar?? – drevicko May 19 '13 at 11:02