jar文件的ANT问题

时间:2011-06-21 19:09:12

标签: java ant jar

我在生成工作jar文件时遇到问题。我想最终得到一个可以通过使用命令java -jar myjar.jar

运行自己的jar文件

到目前为止我已经

<project default="jar" name="Create Runnable Jar fecrudbreset">
<target name="clean">
    <delete dir="bin"/>
    <delete dir="build"/>
</target>
<target name="compile">
    <mkdir dir="./build"/>
    <javac srcdir="./src" destdir="./build">
        <classpath>
            <pathelement location="./lib/sqljdbc4.jar"/>
        </classpath>
    </javac>
</target>
<target name="jar" depends="compile">
    <mkdir dir="./bin"/>
    <jar destfile="./bin/fecrudbreset.jar" >
        <manifest>
            <attribute name="Main-Class" value="FecruDBreset"/>
            <attribute name="Class-Path" value="."/> 
            <attribute name="Built-By" value="${user.name}"/>
        </manifest>
        <fileset dir="./build"/>
        <zipfileset dir="./lib" includes="sqljdbc4.jar"/>
    </jar>
</target>
</project>

编译工作但是当我尝试运行应用程序时,我收到以下错误:

Exception in thread "main" java.lang.NoClassDefFoundError: com/microsoft/sqlserver/jdbc/SQLServerDataSource
    at FecruDBreset.main(Unknown Source)

更新: 我使用的主类使用默认包。找到该类并开始运行但是当它无法找到sql驱动程序时失败。我想我不明白为什么它找不到它。

以下是主要类的定义方式:

import java.sql.*;
import com.microsoft.sqlserver.jdbc.*;

public class FecruDBreset
{

/*
 * Used to reset / nuke fecru database
 */
public static void main(String[] args)
{

此外,如果我解压缩生成的jar文件,内容如下所示:

META-INF/
META-INF/MANIFEST.MF
FecruDBreset.class
sqljdbc4.jar

更新2:我的源代码树如下所示:

|-- bin
|   `-- fecrudbreset.jar
|-- build
|   `-- FecruDBreset.class
|-- build.xml
|-- lib
|   `-- sqljdbc4.jar
|-- readme.txt
`-- src
    `-- FecruDBreset.java

任何人都知道我做错了什么?非常感谢提前。 乍得

5 个答案:

答案 0 :(得分:1)

就像您在ant文件中所做的那样,您需要在类路径中添加sqlserver jdbc驱动程序。 否则java将找不到它。

为此,您需要在myjar.jar

的清单中添加依赖jar文件

您应该能够通过传递包含以下内容的manifest.txt文件来使用ant的jar命令来执行此操作:

清单 - 版本:1.0 Class-Path:sqljdbc4.jar(必要时更新路径) 创建者:1.6.0(Sun Microsystems Inc.)

请参阅 http://download.oracle.com/javase/tutorial/deployment/jar/downman.html

答案 1 :(得分:1)

快速猜测。看起来它找不到你的类com.microsoft.sqlserver / *

包含此内容的jar在哪里?您的默认类路径只是“。”,但看起来您将sqljdbc4.jar放在jar文件中的lib目录中。

您可以修改Class-Path以包含./lib,或者您可以将sqljdbc4.jar jar移动到jar文件的根目录。

答案 2 :(得分:1)

  

@chadneal:如果我解压缩生成的jar文件,内容如下:

META-INF/
META-INF/MANIFEST.MF
FecruDBreset.class
sqljdbc4.jar

主Jar不能包含 sqljdbc4.jar。相反,应该将该Jar的引用添加到清单中的类路径中。

答案 3 :(得分:0)

我认为你错过了类路径条目。

您可能希望在类文件夹“fatjar”或“uberjar”中包含sql-driver directy:http://one-jar.sourceforge.net/

这将创建一个jar文件,可以直接执行。

答案 4 :(得分:0)

您的主要类FecruDBreset依赖于com.microsoft.sqlserver.jdbc.SQLServerDataSource

你应该在类路径中有microsoft sql驱动程序。

所以你应该使用以下命令运行你的jar

java -jar myjar.jar -classpath {path_to_microsoft_jdbc_driver}