Skip to content

I don’t understand the purpose of the src folder and separate packages

I’ve been using Eclipse only for Python over the last few months, and I’d like to start using it for Java.

However, according to the tutorials I’ve looked at, the proper way to organize your Java project is to create a package in the source folder named, for example, com.project, and have all the classes and such be named com.project.class. You can also make sub-packages that work similar to sub-directories such as com.project.utilities.*. With this convention, I don’t see why I would create more than one package per project. Since all the code is contained within this structure, what purpose does the src folder serve?

I hope I’m just wrong about this being the normal way to structure a Java project, because it seems pretty inconvenient.

Also, I haven’t fooled with this yet, but wouldn’t this make loading external dependencies a pain? If I have an img folder placed next to the src and bin folders, wouldn’t I have to use ..img* to access it?



Yes, for small project might not make much sense. You could just have:

+ -
+ -
+ -

But for larger projects you may need to separate into packages, classes that belong to different kinds of functionality.

For instance the core java library has ( to name a few )

java.lang ( contains core clases such as Object, String, Integer, Boolean, StringBuilder ) java.util ( contains utility classes like List, ArrayList, Date, Map, Timer etc ) ( contains classes for Input/Ouput like File, InputStreamReader, BufferedReader etc

java.sql, java.swing, java.text etc. etc

That way, you “pack together” classes that are related to each other.

The source code for these classes, are by convention in a folder named src

So you would have:

+ - src 
     + packageA
     + packageB

You may also need to separate source code from compiled files, so the classes folder is used by convention. Additionally you may want a separate folder to put 3rd part libraries in, another for resources like images, auxiliary files or other, a different for documentation, etc.

So a typical layout may be:

+ - src/ 
+ - lib/
+ - classes/
+ - resources/ 
+ - conf/ 
+ - bin/
+ - doc/
+ - etc/

But of course, it only makes sense for large projects.

Web apps usually contain also a WEB-INF folder etc.

If your project contains only a couple of classes, don’t worry and go with a single folder, but it good to know what’s the rationale.