tags:

views:

5166

answers:

4

Whats the best practice for setting up package structures in a Java Web Application?

How would you setup your src, unit test code, etc?

+12  A: 

You could follow maven's standard project layout. You don't have to actually use maven, but it would make the transition easier in the future (if necessary). Plus, other developers will be used to seeing that layout, since many open source projects are layed out this way,

johnstok
I also recommend using Maven's layout if you have a choice. It's a well-thought out structure that has been battle-tested, and is familiar to many developers.
Dov Wasserman
You can use this oneliner to create the directory layout: mkdir -p src/{main/{java,resources,filters,assembly,config,webapp},test/{java,resources,filters},site}
Daniel Hepper
+6  A: 

There are a few existing resources you might check:

  1. Properly Package Your Java Classes
  2. Spring 2.5 Architecture
  3. SUN Unique Package Guidelines
  4. SUN Naming Conventions

For what it's worth, my own personal guidelines that I tend to use are as follows:

  1. Start with reverse domain, e.g. "com.mycompany".
  2. Use product name, e.g. "myproduct". In some cases I tend to have common packages that do not belong to a particular product. These would end up categorized according to the functionality of these common classes, e.g. "io", "util", "ui", etc.
  3. After this it becomes more free-form. Usually I group according to project, area of functionality, deployment, etc. For example I might have "project1", "project2", "ui", "client", etc.

A couple of other points:

  1. It's quite common in projects I've worked on for package names to flow from the design documentation. Usually products are separated into areas of functionality or purpose already.
  2. Don't stress too much about pushing common functionality into higher packages right away. Wait for there to be a need across projects, products, etc., and then refactor.
  3. Watch inter-package dependencies. They're not all bad, but it can signify tight coupling between what might be separate units. There are tools that can help you keep track of this.
lycono
+1 for comment about tight coupling
byte
A: 

The way i usually have my hierarchy of folder-

  • Project Name
    • src
    • bin
    • tests
    • libs
    • docs
pdeva
A: 

I would suggest creating your package structure by feature, and not by the implementation layer. A good write up on this: http://www.javapractices.com/topic/TopicAction.do;jsessionid=0BF4844350780B6F55476E1137FF4893?Id=205

dataAnalyst