[英]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.