fditz
fditz

Reputation: 882

Long Java classpath solution

I am trying to figure out a way of going around the problem of a long classpath in windows. Although I am in Linux (that is why the examples bellow are on a unix format), the end users may be in linux and I know the problem happens.

My application download and create a string of the jars and files it needs to run. It than generates a string such as:

java -classpath path_to_file1:path_to_file2:path_to_file3 jvm_args MainClass

And runs the application. This works fine in Linux but it explodes in windows because the classpath is too long.

The problem I understood and I have tried the solution proposed on: How to set a long Java classpath in Windows?

However I had no success since the path to the MainClass is not found (it is on the classpath!). Here is what I did:

I have the following folder structure:

[root]
├── classes
│   └── com
│       └── tst
│           ├── CPTest1.class
│           ├── CPTest2.class
│           └── CPTest3.class
└── com
    └── tst
        ├── CPTest1.java
        ├── CPTest2.java
        └── CPTest3.java

the classes were compiled by calling:

javac -d classes -cp . com/tst/*

And here are the files:

CPTest1.java

package com.tst;

public class CPTest1{
    public static void main(String[] args) {
        System.out.println ("Run CPTest1.main()");
    }
}

CPTest2.java

package com.tst;

public class CPTest2 {
    public static void main(String[] args) {
        System.out.println ("Run CPTest2.main()");
        CPTest1 cpt1 = new CPTest1();
    }
}

CPTest3.java

package com.tst;

public class CPTest3 {
    public static void main(String[] args) {
        System.out.println ("Run CPTest3.main()");
        CPTest1 cpt1 = new CPTest1();
        CPTest2 cpt2 = new CPTest2();
    }
}

Now if I am on [root] and run:

java -cp classes com.tst.CPTest3

I see the correct output. However if I first generate the "pathing jar" as the solution I pointed out suggests, by creating a file: cpTest.txt (I've tried this with relative and full path)

Class-Path: classes

and create the jar using:

jar -cvfm cp.jar cpTest.txt

than finally trying to run:

java -cp cp.jar com.tst.CPTest3

all I get is an error of not finding the CPTest3 class:

Error: Could not find or load main class com.tst.CPTest3

What am I missing? Thanks for any help!

Upvotes: 3

Views: 1793

Answers (1)

user207421
user207421

Reputation: 310980

Use java -jar and put all the dependent JAR files into the main JAR file's Class-path manifest entry.

Upvotes: 1

Related Questions