如何从不在包中的jar导入Java类?

时间:2013-03-10 00:42:41

标签: java

我有一个.jar,其中包含一个我想要使用的类:FooBar.class。这个类不在一个包中,它只是位于.jar的根目录中。

我已将.jar作为库添加到项目中,但问题是,我不知道如何导入它,因为它不在包中。

如果我这样做:import FooBar;我收到错误:. expected,我无法在任何地方使用FooBar类,因为它显示Symbol not found

有什么想法吗?

2 个答案:

答案 0 :(得分:4)

您无法从默认包导入。你(或任何人写的)不应该使用默认包。除了非常小的示例程序之外,您应该避免使用默认包。

如果是您的代码,请将其放入包中,应该如此。如果它是别人的,如果他们花时间为你捣乱,他们可以把它放在一个包里。

或者,省略导入,但记得在编译时将jar添加到类路径中。

或者,如果你懒惰,不关心忽略所有最佳实践(即如果这是玩具程序等)

$ jar -xvf <whatever>.jar

将jar中的文件解压缩到当前目录中,此时您可以正常使用它们。如果您使用的是Windows,则可以通过任何程序处理.zip文件来执行此操作 - .jar只是带有清单的.zip。

答案 1 :(得分:0)

我认为你可以用反思做到这一点。

<强> EDIT2:

好吧,也许你不需要反思。我做了另一个测试,我直接实例化测试并且它工作。你所要做的就是将jar放在你的类路径中,如上面的海报所说,而不是试图导入类文件。

修改:为什么要进行downvote?我是完全正确的。

// No package statement here
public class Test {
  public String getMessage() {
    return "Hello World!";
  }
}

$ javac Test.java
$ jar cvf my.jar Test.class

// No import statements needed
public class TestRefl {
  public static void main(String[] args) throws Exception {
    Class c = Class.forName("Test");
    Test t = (Test) c.newInstance();
    System.out.println(t.getMessage());
  }
}

$ javac TestRefl.java
$ java -classpath ".:my.jar" TestRefl
$ Hello World!

您甚至不必从默认包中导入该类。现在你有一个实例,所以你可以做任何你想做的事。