开发者

CLASSPATH 101... (on Windows)

开发者 https://www.devze.com 2023-01-13 11:27 出处:网络
I\'m new to working with Java from the command line and I don\'t get it. I read previous CLASSPATH questions but still didn\'t get my problem to work.

I'm new to working with Java from the command line and I don't get it. I read previous CLASSPATH questions but still didn't get my problem to work.

I have the following class in C:\Temp\a\b\c

package a.b.c;
开发者_如何学JAVA
public class Hello
{
        public static void main(String args[])
        {
           System.out.println("Hello World!");
        }
}

The package name is intentional. I compiled it fine and I put the Hello.class file inside C:\Temp\a\target

Now in the command line I go to C:\Temp\ and execute the following:

java -cp .\a\target a.b.c.Hello

It complains that it cannot find the class a.b.c.Hello

Thanks in advance!!


and I put the Hello.class file inside C:\Temp\a\target

This is wrong. It should be placed in the same folder as the .java file. The source code itself is declared to be in the package a.b.c; so, the .class file should really be kept in \a\b\c folder.

Then, to execute it just do:

C:\Temp>java -cp . a.b.c.Hello


Avoid "putting" the classfiles anywhere. The following should work:

javac -d c:\temp c:\temp\a\b\c\Hello.java
# creates Hello.class in c:\temp\a\b\c
java -cp c:\temp a.b.c.Hello


To expand on BalusC's point: the classpath defines a "root". When java is looking for your classes, it will start at each root (or jar) in your class path and drill down through the directories to match the package strucutre. You still need to have you class in a directory structure that matches its package name. In your case, to execute

java -cp .\a\target a.b.c.Hello

you would move the file to

.\a\target\a\b\c\Hello.class

Years ago, I too found this baffling.


Java will try to search for a directory structure a\b\c from starting in target and as you notice, it wont work.

Move the whole directory into target and you'll be fine, it should look like:

 C:\Temp\a\target\a\b\c\Hello.class

You may compile it with the -d option which tall the compiler where to put the class file.

Many project structures are like this.

C:\whatever\projectname\src
C:\whatever\projectname\classes
C:\whatever\projectname\bin
C:\whatever\projectname\lib
C:\whatever\projectname\doc

That way you can always step on your project directory and type:

javac -d classes src\*.java 

Which will compile all the sources in the src directory and will place them in the classes directory.

Then execute your program:

java -cp classes a.b.c.Hello 

You may optionally place required jars in lib

This works pretty fine for small programs ( < 10 src files and 2 - 3 jar libraries ) If it grows beyond that, you could probably use an IDE or ant

The good thing about following this project structure is that some IDES ( as IntellJ idea ) just pick them very easily when you create a new project. You select "Create project from existing sources" and then you can continue from there.

I like compiling and editing at the command line a lot!!

0

精彩评论

暂无评论...
验证码 换一张
取 消