tags:

views:

80

answers:

3

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?

+2  A: 

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.

dbyrne
+3  A: 

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 in packages classes that belong to different kind 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" classes that are related to each other together.

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, another for resources like images, auxiliar 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.

OscarRyz
+1  A: 

You don't have to put everything in a package. For very small apps you can just put the java source file(s) directly in the src directory, which means your classes will belong to the "default" package. But most projects use a unique package name in order to avoid name clashes, for example between java.util.Date and java.sql.Date.

Using a "src" directory is a convention that the IDE, build tools, and other programmers all readily understand. If you avoided "src" and instead used a directory structure like:

com/project/MyClass.java
img/icon.jpg
...etc

Then you can't simply tell the IDE to look for java source files in the "com" folder, because then it will interpret the class as being "project.MyClass" instead of "com.project.MyClass". On the other hand, you can't tell it to look for source files in the root folder either, because then it will expect the img folder to contain java sources.

Todd Owen