Trying to build a java application I am able to run the application successfully through Eclipse but I’m unable to run the jar file built by ant. I suspect my build.xml is to blame, I’m trying to get it right. Need help!
The mysql driver .jar file is in the lib/ directory in the project.
error:
$ java -jar dist/lib/MyProject.jar
Loading Mysql JDBC driver...
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:186)
at com.test.bh1.bh.main(Unknown Source)
bh.java
package com.test.bh1;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class bh {
/**
* @param args
*/
public static void main(String[] args) {
System.out.println("Loading Mysql JDBC driver...");
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
} catch (Exception e) {
msg ("Error instantiating mysql jdbc driver. E=" + e.getMessage());
// bail.
return;
}
msg ("Successfully instantiated mysql jdbc driver. ");
Connection con = null;
String url = "jdbc:mysql://servername:3306/databasename";
String user = "username";
String password = "password";
try {
con = DriverManager.getConnection(url, user, password);
Statement st = con.createStatement();
ResultSet result = st.executeQuery("SELECT VERSION()");
if (result.next()) {
msg(result.getString(1));
}
con.close();
} catch (SQLException ex) {
msg(ex.getMessage());
}
}
private static void msg (String m) {
System.out.println(m);
}
}
build.xml
<project name="TestProj1" default="dist" basedir=".">
<description>
Build File For This Project
</description>
<!-- set global properties for this build -->
<property name="src" location="src"/>
<property name="build" location="build"/>
<property name="dist" location="dist"/>
<property name="user.name" location="Brad Hein (CQA)"/>
<property name="lib.dir" location="lib/"/>
<property name="mysql.jar" location="mysql-connector-java-5.0.8-bin.jar"/>
<property name="appName.jar" location="${dist}/lib/MyProject.jar"/>
<path id="classpath">
<fileset dir="${lib.dir}" includes="**/*.jar"/>
</path>
<path id="build.classpath">
<pathelement location="${mysql.jar}"/>
<pathelement path="${appName.jar}"/>
</path>
<target name="init">
<!-- Create the time stamp -->
<tstamp/>
<!-- Create the build directory structure used by compile -->
<mkdir dir="${build}"/>
</target>
<target name="compile" depends="init"
description="compile the source " >
<!-- Compile the java code from ${src} into ${build} -->
<javac srcdir="${src}" destdir="${build}" includeantruntime="false">
<classpath refid="build.classpath"/>
</javac>
<!-- Copy dependency libraries to the build path so they get packaged up in the distro jar file. -->
<copy todir="${build}/lib">
<fileset dir="${lib.dir}">
<include name="*.jar"/>
</fileset>
</copy>
</target>
<target name="dist" depends="compile"
description="generate the distribution" >
<!-- Create the distribution directory -->
<mkdir dir="${dist}/lib"/>
<!-- Put everything in ${build} into the MyProject-${DSTAMP}.jar file -->
<jar jarfile="${appName.jar}" basedir="${build}">
<!-- Creates a manifest file in the jar-->
<manifest>
<attribute name="Built-By" value="${user.name}" />
<attribute name="Class-Path" value="./lib/mysql-connector-java-5.0.8-bin.jar"/>
<attribute name="Main-Class" value="com.test.bh1.bh"/>
</manifest>
</jar>
</target>
<target name="clean"
description="clean up" >
<!-- Delete the ${build} and ${dist} directory trees -->
<delete dir="${build}"/>
<delete dir="${dist}"/>
</target>
</project>
Doing this:
Says that the
mysql-connector-java-5.0.8-bin.jarneeds to be in a lib folder next to yourappName.jar. Not inside of it. Try putting your lib folder with the mysql jar next to yourappName.jarand running the application should confirm that this is the problem.