3

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

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

如果我只是这样做:import FooBar;我收到错误:. expected,并且我无法在FooBar任何地方使用 class,因为它说Symbol not found.

有任何想法吗?

4

2 回答 2

4

您不能从默认包导入。您(或编写它的人)无论如何都不应该使用默认包。除了非常小的示例程序外,您应该避免使用默认包。

如果它是您的代码,请将其放入一个包中,就像它应该的那样。如果是别人的,如果他们花时间为你装罐,他们可以把它放在一个包裹里。

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

或者,如果你很懒,并且不在乎忽略所有最佳实践(即,如果这是一个玩具程序等)

$ jar -xvf <whatever>.jar

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

于 2013-03-10T01:00:12.417 回答
0

我认为你可以通过反思来做到这一点。

编辑2:

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

编辑:为什么投反对票?我完全正确。

// 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!

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

于 2013-03-10T00:53:05.570 回答