在其他计算机上运行时导出.jar给出"找不到合适的驱动程序用于jdbc"

时间:2015-10-28 12:33:35

标签: java sql-server jdbc intellij-idea jar

我使用IntelliJ IDEA创建了一个简单的小程序来更新MSSQL数据库中某些新列的内容。我下载了外部库sqljdbc4.jar并将其添加到Project Settings>库,以及确保将库.jar添加到输出布局中。我已经确认通过在我使用的Mac上解压缩文件,将sqljdbc4.jar包含在导出的.jar文件中。

程序在我的Mac上运行得很好,但是当我将.jar复制到同事的计算机上,或者尝试在Parallels上的Windows中运行时,我们只得到一个ClassNotFound Exception,其中包含以下注释: "没有为jdbc找到合适的驱动程序:sqlserver [服务器详细信息]"

该职位的代码如下:

//[....]
private final static String SQL_DRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver";

public SQLConnector(){

}
public boolean updateDatabase(String[] results, boolean inhouse){
    Connection conn;

    try{
        Class.forName(SQL_DRIVER);
    } catch (ClassNotFoundException e){
        JOptionPane.showMessageDialog(null, "ERROR: " + e.getMessage(), "Exception type: ClassNotFoundException", JOptionPane.ERROR_MESSAGE);
        return false;
    }
//[...]

ClassNotFound-exception是触发的内容。有任何想法吗?如果需要一些其他信息,请随时提出要求。

编辑:我将/ sqljdbc4.jar保存在/ Library / Java / Extensions中,如果我从那里删除它,那么程序也会在我的Mac上出现同样的错误。即使我将.jar文件存储在项目的/ bin / -folder中,也要确保该文件是作为库添加的文件。从扩展中删除jdbc-jar后,即使这样,程序在从IntelliJ执行时仍然可以正常运行。

1 个答案:

答案 0 :(得分:2)

我明白了。问题在于工件的设置。在指定从模块创建JAR的详细信息时,我之前选择了“提取到目标JAR”,但正确的选项似乎是“复制到输出目录并通过清单链接”。执行此操作会出现清单已存在的错误,因此我必须手动插入并删除“src”和“out> production> [project name]”中的META-INF文件夹。然后允许IntelliJ重新构建工件。这导致sqljdbc4.jar文件与我自己的JAR一起添加,而不是将sqljdbc4.jar文件复制到我自己的JAR中。

我不知道这两个选项之间的主要区别是什么....