簡體   English   中英

jar文件的ANT問題

[英]ANT problem with jar file

我在生成工作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

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

就像在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

快速猜測。 看起來它找不到你的類com.microsoft.sqlserver / *

包含它的罐子在哪里? 您的默認類路徑只是“。”,但看起來您將sqljdbc4.jar放在jar文件中的lib目錄中。

您可以修改Class-Path以包含./lib,也可以將sqljdbc4.jar jar移動到jarfile的根目錄。

@chadneal:如果我解壓縮生成的jar文件,內容如下所示:

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

主Jar不能包含 sqljdbc4.jar 相反,應該將該Jar的引用添加到清單中的類路徑中。

我想你錯過了classpath條目。

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

這將創建一個jar文件,可以直接執行。

您的主要類FecruDBreset依賴於com.microsoft.sqlserver.jdbc.SQLServerDataSource

你應該在類路徑中有microsoft sql驅動程序。

所以你應該使用以下命令運行你的jar

java -jar myjar.jar -classpath {path_to_microsoft_jdbc_driver}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM