Ant in Eclipse Builds a Corrupt JAR
807601May 9 2008 — edited May 12 2008
When I build a JAR file in Eclipse using an Ant build file, the resulting JAR is corrupt. It cannot find the main class. Repairing the JAR using WinRAR fixes this issue. WinRAR reports repairing corrupt header information. This issue does not occur when manually exporting a JAR from Eclipse. In all cases, we are using the same manifest file. The Ant compile does not show any warnings or errors. The exact runtime error when executing the corrupt JAR is: "Could not find the main class. Program will exit."
I am relatively new to Ant. I have searched the forums and google, but I have been unable to find anyone describing similar issues. I have spent three weeks trying to make this code work. None of the tutorials or FAQs I have found mention this issue, and none of the techniques they describe resolve it. Do you have any idea what might be causing this issue, or how to resolve it? The main reason I want to use Ant is to automate our build process. We can't do that if we have to manually repair the resulting JAR file after each build. I'm probably missing something obvious, but I don't have the Ant experience to know what that is. Any help would be greatly appreciated.
Ant Version: 1.7
Eclipse Version: 3.3.1.1
Java Version: 1.6.0.3
Platform: Windows XP (SP2)
My build file (replacing my login with 'username' for privacy purposes):
<?xml version="1.0" encoding="utf8"?>
<project name="ecsMerlinJarBuild" default="MakeMerlinJar" basedir=".">
<target name="Initialize" description="delete old .class files">
<delete dir="JavaSource\com\ebsco\component" includes="*.class" />
<delete dir="JavaSource\com\ebsco\core" includes="*.class" />
<delete dir="JavaSource\com\ebsco\dao" includes="*.class" />
<delete dir="JavaSource\com\ebsco\datatype" includes="*.class" />
<delete dir="JavaSource\com\ebsco\dto" includes="*.class" />
<delete dir="JavaSource\com\ebsco\interfaces" includes="*.class" />
<delete dir="JavaSource\com\ebsco\module" includes="*.class" />
<delete dir="JavaSource\com\ebsco\parents" includes="*.class" />
<delete dir="JavaSource\com\ebsco\process" includes="*.class" />
<delete dir="JavaSource\com\ebsco\screen" includes="*.class" />
<delete dir="JavaSource\com\ebsco\util" includes="*.class" />
<delete dir="JavaSource\com\ebsco\window" includes="*.class" />
<delete dir="JavaSource\com\ebsco\windowwrapper" includes="*.class" />
</target>
<target name="Compile" description="Compile .java files">
<javac srcdir="JavaSource\com" includes="ebsco\**\*.java" bootclasspath="C:\\Program Files\\Java\\jre1.6.0_03\\lib\\rt.jar" classpath="C:\\Documents and Settings\\username\\workspace\\merlin\\IBMLibraries.jar" />
</target>
<target name ="MakeMerlinJar" description="Create a jar for the Merlin project">
<jar jarfile="Merlin.jar" excludes="*.jar, *.zip" manifest="MANIFEST.txt" update="true" duplicate="fail" >
<zipfileset dir="JavaSource\com\ebsco\component" includes="*.class" prefix="com\ebsco\component" />
<zipfileset dir="JavaSource\com\ebsco\core" includes="*.class" prefix="com\ebsco\core" />
<zipfileset dir="JavaSource\com\ebsco\dao" includes="*.class" prefix="com\ebsco\dao" />
<zipfileset dir="JavaSource\com\ebsco\datatype" includes="*.class" prefix="com\ebsco\datatype" />
<zipfileset dir="JavaSource\com\ebsco\dto" includes="*.class" prefix="com\ebsco\dto" />
<zipfileset dir="JavaSource\com\ebsco\interfaces" includes="*.class" prefix="com\ebsco\interfaces" />
<zipfileset dir="JavaSource\com\ebsco\module" includes="*.class" prefix="com\ebsco\module" />
<zipfileset dir="JavaSource\com\ebsco\parents" includes="*.class" prefix="com\ebsco\parents" />
<zipfileset dir="JavaSource\com\ebsco\process" includes="*.class" prefix="com\ebsco\process" />
<zipfileset dir="JavaSource\com\ebsco\screen" includes="*.class" prefix="com\ebsco\screen" />
<zipfileset dir="JavaSource\com\ebsco\util" includes="*.class" prefix="com\ebsco\util" />
<zipfileset dir="JavaSource\com\ebsco\window" includes="*.class" prefix="com\ebsco\window" />
<zipfileset dir="JavaSource\com\ebsco\windowwrapper" includes="*.class" prefix="com\ebsco\windowwrapper" />
<zipfileset dir="." includes=".classpath, .project, *.txt, *.xml" />
</jar>
</target>
<target name="CopyJarFile" description="Copy the Merlin jar file to the set destination">
<copy file="Merlin.jar" todir="C:\\Documents and Settings\\username\\Desktop\\JARs"/>
</target>
</project>