views:

179

answers:

4

Hey.

My java application has got a package structure similar to this; src/com/name/app , src/com/name/app/do , src/com/name/utils/db and so on.

How would I go about compiling java files in these directories in to a runnable jar? I need to package required libraries into the generated JAR (jdbc).

I've always done these things in Eclipse but now I need to supply a couple of people with a way to compile the repository without the use of eclipse and I was thinking of making a makefile or a script that invokes the necessary javac pattern.

Any help is greatly appreciated.

+5  A: 

Take a look at Ant. It's a relatively simple build tool to understand, and provides everything that meets your requirements. Here's a quick skeleton build.xml to get you started:

<project name="my_app_name" default="jar">

  <target name="compile">
     <javac srcdir="src" destdir="bin">
        <classpath>
           <fileset dir="lib">
              <include name="**/*.jar" />
           </fileset>
        </classpath>
     </javac>
  </target>

  <target name="jar">
     <jar manifest="manifest_file" destfile="dist/my_app_name.jar">
        <fileset dir="bin" />
        <fileset dir="lib" />
     </jar>
  </target>

You need to create a manifest file that will tell the java process which class holds the "main" method. Here is a good place to start learning about manifests.

As an alternate that produces really cluttered Ant build files, you can right click on your Eclipse project and choose "Export...", then choose "General > Ant Buildfiles".

Anyway, that should get you started. You can ask more specific questions as you run into them.

Rob Heiser
Thanks! I'll definitely look in to Ant.
John
A: 

Consider using Ant to do this. http://ant.apache.org/

Nate
A: 

I recommend that you use Apache Ant to implement your build scripts.

If implemented correctly, Ant is easy to use and the build scripts can be run on any platform that you can install a JDK on. Indeed, with a little bit of work, you can even set up your project so that users don't even need to download / install Ant. (Hint: add the Ant JAR files and a wrapper script to your project distro)

Stephen C
+4  A: 

First of all, consider using Ant for such a task.

But since you asked for a manual process, you need to first create a manifest file, like so:

Manifest-Version: 1.0
Created-By: 1.6.0 (Sun Microsystems Inc.)
Class-Path: lib/jdbc.jar lib/otherlib.jar
Main-Class: com.name.app.MainClass

Replace the contents of Class-Path with your libs, and Main-Class with the fully qualified name of your main class.

Then, you need to generate the actual .jar, using the following command:

jar cfm app.jar MANIFEST.MF src/com/name/app/*.class src/com/name/app/do/*.class

Where MANIFEST.MF is the previously mentioned manifest file, and the rest is the folders where your .java classes lie in.

Finally, to run your app, you simply execute: java -jar app.jar.

JG
Thanks a lot. This is exactly what I was looking for but considering you, Rob and the rest of the responders have suggested Ant I'll see if I can set it up this weekend.
John
Yes, it is much more simpler, and platform-independent : ).
JG