Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

I don't understand the purpose of the src folder and seperate packages

Tags:

java

eclipse

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?

like image 768
Bibendum Avatar asked Jul 12 '10 03:07

Bibendum


2 Answers

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

MyProject
|
+ - FileOne.java
+ - FileTwo.java
+ - FileThree.java

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 ) java.io ( 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:

YourProject 
|
+ - 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:

YourProject
|
+ - 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.

like image 117
OscarRyz Avatar answered Oct 21 '22 01:10

OscarRyz


I can understand why this might seem inconvenient for small projects. However, if you ever have to work on a project with hundreds (or thousands) of source files, having intuitive sub-packages are an absolute necessity to keep everything organized.

As far as loading external dependencies based on the relative path from where the source file is located, it all depends on how the compiled application is organized. It is not typical to reference resources with "..\img" like you describe.

like image 38
dbyrne Avatar answered Oct 21 '22 02:10

dbyrne