I do all of my Java coding 'by hand'. I don't use an IDE and I don't use build/packaging/deployment tools. I like to get my hands dirty and I like to know everything that is in my project, I don't want any black boxes. Of course if a project were to become so complex, or powerful, or huge as to require additional tools I will use them. But I would be sad that I had to.
I use little shell scripts I wrote to do the compiling of code and packing of .jars. I use VIM to write all the Java code. I have a common structure that I use for all of my projects and I will share that with you here.
ROOT
Each project is a self contained unit. It lives within the project root directory. In this article I will use WorldWeaver (My IntFiction engine) as our example. All of the client code, classes, and output, and anything else for the project lives in:
~/worldweaver/
At this root level I have any shell scripts I use for compiling and running etc.
CODE
The code directory contains all of my source code (.java). I follow title case for all of my classes. - However, I'm bad, I use title case for my methods as well. And I use title case for my public variable methods, camel case for my private variables etc. I think this is a habit from my .NET days.
COMPILED
The compiled directory is where I have my .class files built. This directory also contains my manifest file.
RELEASE
The release directory is where my jar file is compiled. It contains any files that are to be distributed with the app, including data files, config files, and databases etc.
The full structure is:
ROOT
|__ CODE
|__ COMPILED
|__ RELEASE
I use javac with parameters for all of my building, copying and calls to java -jar in my shell scripts for launching, although I could also chmod the jar as executable and double click it like in Windows or Mac OS.