我在生成工作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
任何人都知道我做错了什么?非常感谢提前。 乍得
答案 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}