Java:将包含的Jar文件添加到linux中创建的Jar文件中

时间:2013-07-10 22:20:05

标签: java classpath

我需要帮助,包括导入的jar文件到我在Linux的java程序中。这是程序:

import java.sql.*;
public class CreateCoffees
{
    public static void main(String args[])
    {
        try {
             Class.forName("com.ibm.db2.jcc.DB2Driver"); 
        }
        catch(java.lang.ClassNotFoundException e) {
            System.err.print("ClassNotFoundException: ");
            System.err.println(e.getMessage()); 
            System.exit(1);
         }
    }
}

为了执行Class.forName("com.ibm.db2.jcc.DB2Driver");,我需要在类路径中添加两个.jar个文件:

db2jcc_license_cu.jar
db2jcc4.jar

我将这些jar文件放入与CreateCoffees.java文件相同的目录中,然后编译并运行它:

javac CreateCoffees.java 
java CreateCoffees

但是我收到了这个错误

ClassNotFoundException: com.ibm.db2.jcc.DB2Driver

然后我尝试了" -classpath"选项

javac -classpath ./db2jcc_license_cu.jar:./db2jcc4.jar CreateCoffees.java
java -classpath ./db2jcc_license_cu.jar:./db2jcc4.jar CreateCoffees

但得到了这个

Exception in thread "main" java.lang.NoClassDefFoundError: CreateCoffees
Caused by: java.lang.ClassNotFoundException: CreateCoffees

如何将这些jar文件包含到我的runnable jar中,以便我可以使用java -jar myjar.jar运行它?

2 个答案:

答案 0 :(得分:1)

试试这个

java -classpath ./db2jcc_license_cu.jar:./db2jcc4.jar:. CreateCoffees

当你使用-classpath时,它会丢弃classpath中的当前目录,因此它在classpath中也需要.并且显式

答案 1 :(得分:0)

如何将项目的jar包含在可运行的jar中:

我将逐步使用Eclipse Version:3.7.2在Ubuntu 12.10上运行。我还将向您展示如何制作build.xml,以便您可以从命令行执行ant jar并使用提取到其中的其他导入的jar创建您的jar。

基本上你要求Eclipse构建build.xml,将你的库导入jar中。

  1. 启动Eclipse并创建一个新的Java项目,创建一个新的包'mypackage',添加您的主类:Runner将此代码放在那里。

    enter image description here

  2. 现在包含mysql-connector-java-5.1.28-bin.jar from Oracle,它使我们能够编写Java来连接MySQL数据库。通过右键单击项目来执行此操作 - >属性 - > java构建路径 - >添加外部罐子 - >选择mysql-connector-java-5.1.28-bin.jar。

  3. 在eclipse中运行程序,它应该运行,并告诉你用户名/密码无效,这意味着Eclipse已经正确配置了jar。

  4. 在Eclipse中转到File - > Export - > Java - > Runnable Jar File。您将看到此对话框:

    enter image description here

    确保设置'另存为ant脚本'复选框。这就是为什么你可以使用命令行稍后进行ant jar

  5. 然后转到终端并查看ant脚本:

    enter image description here

  6. 所以你看,我运行了jar并且它没有错误,因为它发现mysql-connector-java-5.1.28-bin.jar内嵌了Hello.jar

    查看Hello.jar:vi Hello.jar,你会看到许多对com/mysql/jdbc/stuff.class的引用

    要在命令行上执行ant jar以自动完成所有这些操作:将buildant.xml重命名为build.xml,并将目标名称从create_run_jar更改为jar

    然后,在MyProject内,您输入ant jar并繁荣。你在MyProject中有你的jar。你可以使用java -jar Hello.jar调用它,一切正常。