ant built version of application fails to find dependent jar
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:
<attribute name="Class-Path" value="./lib/mysql-connector-java-5.0.8-bin.jar"/>
Says that the mysql-connector-java-5.0.8-bin.jar
needs to be in a lib folder next to your appName.jar
. Not inside of it. Try putting your lib folder with the mysql jar next to your appName.jar
and running the application should confirm that this is the problem.
Try
java -cp lib -jar dist/lib/MyProject.jar
精彩评论