Ganesan MP
Ganesan MP

Reputation: 397

Classpath limitation in Linux

We are executing standalone java program from shell script, having a comman script to mention classpath, path, etc..In this common script, we have added several classpaths now and number of character is more than 9000. It is working fine in the test env. Will it cause any issue in Production? Any limitation is there in linux to set classpath? What is the max char for command line inputs...

Upvotes: 6

Views: 7171

Answers (3)

Jaco Van Niekerk
Jaco Van Niekerk

Reputation: 4182

No, there is no limitation. In Windows there is (8191 characters), but not under Linux. We work with the concept of classpath-files. These file lists all the dependencies for the application, eg:

...
libs/org/easymock/easymock/2.2/easymock-2.2.jar
libs/org/hamcrest/hamcrest-core/1.1/hamcrest-core-1.1.jar
libs/org/hibernate/hibernate-envers/4.1.0.Final/hibernate-envers-4.1.0.Final.jar
libs/com/google/inject/guice/3.0/guice-3.0.jar
...

and then we convert this into usable classpath and run the application as follows:

#!/bin/bash

CLASSPATH_FILE=`ls -r1 ${APP-HOME}/classpaths/myapp*.classpath | head -n1`
CLASSPATH=$(cat $CLASSPATH_FILE | sed 's_^libs_ ${APP-HOME}/libs_' | tr -d '\n' | tr -d '\r' | sed 's_.jar/libs/_.jar:/libs/_g' | sed 's_.pom/libs/_.pom:/libs/_g')

java -d64 -cp $CLASSPATH com.blah.main.Main $@

We have never run into problems and these classpath entries gets pretty huge.

EDIT: As a side note, you can use the maven dependency plugin to generate a list of dependencies.

Upvotes: 5

artaxerxe
artaxerxe

Reputation: 6411

When you use in your Java program some classes from a jar file that is specified in the classpath variable, the JVM won't load that class until your running program will explicitly need that class (or if you load that class explicitly from your code - the same idea). The only problem that can appear when you have a very long classpath, is the time needed for classpath checking before the JVM find the right jar file. But that should not be a problem. If your program behaves well in tests, you should not be worried about this.

Upvotes: 0

QuantumMechanic
QuantumMechanic

Reputation: 13946

See this stackoverflow answer about maximum linux command line lengths.

The maximum command line length will be roughly between 128KB and 2MB.

The max size of any one argument is considerably smaller, though, and 9000 chars might be problematic.

Upvotes: 0

Related Questions