Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Javac vs Java within -classpath option

What is the difference in calling the -classpath option from javac and from java

for example:

javac -classpath MyJar.jar GetJar.java
java -classpath MyJar.jar:. GetJar

it works as well as:

javac -classpath MyJar.jar GetJar.java
java GetJar

So basically where the first -classpath related to javac needs to be there, on the other hand in the java command line it might be optional. Why? Do you know in which circumstance it would be mandatory. And more in general what is the effect of -classpath called by javac and what is the effect of -classpath called by java.

Thanks in advance.

like image 828
Rollerball Avatar asked Feb 27 '13 20:02

Rollerball


2 Answers

One is the classpath used for compiling. The other is the classpath used for running. And they do not have to be the same thing. The set of classes needed for the compilation processes are all those referred to by every class being compiled. Whereas your runtime JAR could be invoking a standalone class with an empty main method and no dependencies.

Just remember that at runtime class dependencies are resolved dynamically, aka a class is only loaded when it is needed (this is a generalization, boot and system classes are always loaded).

like image 104
Perception Avatar answered Oct 11 '22 13:10

Perception


This document contains answers for your questions

http://docs.oracle.com/javase/1.4.2/docs/tooldocs/windows/javac.html

using -classpath every time is a very time consuming work. Instead, use environment variables (if you are dealing with a package such as Java Mail)

classpath is used for compiling. Javac is the Java Compiler, where it converts your code into byte code.

When it comes to java it is used to run your Java source file/jar.

like image 45
PeakGen Avatar answered Oct 11 '22 14:10

PeakGen