Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在使用另一个jar文件时创建jar文件?_Java_Jar - Fatal编程技术网

Java 如何在使用另一个jar文件时创建jar文件?

Java 如何在使用另一个jar文件时创建jar文件?,java,jar,Java,Jar,我正在尝试编写应用程序。在应用程序中,我使用另一个jar文件(opr.jar)。在opr.jar(d:\opr.jar)中,我有一个接口运算符: package operatorAPI; public interface Operator { int calculate(int num1 , int num2); } 此外,我还有实现操作员界面的class Plus(d:\math\Plus): package math; import operatorAPI.*; public

我正在尝试编写应用程序。在应用程序中,我使用另一个jar文件(opr.jar)。在opr.jar(d:\opr.jar)中,我有一个接口运算符:

package operatorAPI;

public interface Operator
{
    int calculate(int num1 , int num2);
}
此外,我还有实现操作员界面的class Plus(d:\math\Plus):

package math;

import operatorAPI.*;

public class Plus implements Operator
{
    public int calculate(int num1 , int num2)
    {
        return num1 + num2;
    }
}
package source.main;

import java.util.*;
import java.io.*;
import java.net.URL;
import java.net.URLClassLoader;
import operatorAPI.*;


public class Sum
{
    public static void main(String[] args) throws Exception
    {
        File operatorFile = new File("D:\\");
        URL operatorFilePath = operatorFile.toURL();
        URL[] operatorFilePaths = new URL[]{operatorFilePath};
        ClassLoader operatorsLoader = new URLClassLoader(operatorFilePaths);
        Class currentClass = operatorsLoader.loadClass("math.Plus");

        Operator instance = (Operator) currentClass.newInstance();
        int output = instance.calculate(10,20);
        System.out.println("The result is :" + output);
    }
}
在主程序(d:\source\main\Sum)中,我加载class Plus并使用操作员界面:

package math;

import operatorAPI.*;

public class Plus implements Operator
{
    public int calculate(int num1 , int num2)
    {
        return num1 + num2;
    }
}
package source.main;

import java.util.*;
import java.io.*;
import java.net.URL;
import java.net.URLClassLoader;
import operatorAPI.*;


public class Sum
{
    public static void main(String[] args) throws Exception
    {
        File operatorFile = new File("D:\\");
        URL operatorFilePath = operatorFile.toURL();
        URL[] operatorFilePaths = new URL[]{operatorFilePath};
        ClassLoader operatorsLoader = new URLClassLoader(operatorFilePaths);
        Class currentClass = operatorsLoader.loadClass("math.Plus");

        Operator instance = (Operator) currentClass.newInstance();
        int output = instance.calculate(10,20);
        System.out.println("The result is :" + output);
    }
}
我使用命令行编译和运行该程序。我的应用程序工作正常,但当我尝试将我的主程序(source.main.Sum)作为名为app.jar的可执行jar文件并运行时,我遇到以下异常:

NoClassDefFoundError : operatorAPI/Operator
我创建并运行jar 0file,如下所示:

jar -cvfe app.jar source.main.Sum source/main/Sum.class 
java -cp opr.jar;. -jar app.jar

有人能告诉我为什么会发生这种情况吗?

您的清单文件正确吗?是的,我想是的。清单版本:1.0创建人:1.7.0_45(Oracle公司)主类:source.Main.Main您的错误是编译时使用了
operatorAPI/Operator
,但在运行时找不到它,所以在你的类路径中有一个问题,它是否像主类:?@Maximus Decimus Meridius Yes你的清单文件正确吗?是的,我想是的。清单版本:1.0创建人:1.7.0_45(Oracle Corporation)主类:source.Main.Main您的错误是编译时使用了
operatorAPI/Operator
,但在运行时找不到它,因此您的类路径中存在一个问题,它是否像主类:?@Maximus Decimus Meridius yes