我有一个 .jar ,其中包含一个我想使用的类: FooBar.class 。此类不在包中,它只是位于 .jar 的根目录中。
我已将 .jar 作为库添加到项目中,但问题是,我不知道如何导入它,因为它不在包中。
如果我只是这样做:import FooBar;
我收到错误:. expected
,并且我无法在FooBar
任何地方使用 class,因为它说Symbol not found
.
有任何想法吗?
我有一个 .jar ,其中包含一个我想使用的类: FooBar.class 。此类不在包中,它只是位于 .jar 的根目录中。
我已将 .jar 作为库添加到项目中,但问题是,我不知道如何导入它,因为它不在包中。
如果我只是这样做:import FooBar;
我收到错误:. expected
,并且我无法在FooBar
任何地方使用 class,因为它说Symbol not found
.
有任何想法吗?
您不能从默认包导入。您(或编写它的人)无论如何都不应该使用默认包。除了非常小的示例程序外,您应该避免使用默认包。
如果它是您的代码,请将其放入一个包中,就像它应该的那样。如果是别人的,如果他们花时间为你装罐,他们可以把它放在一个包裹里。
或者,省略导入,但请记住在编译时将 jar 添加到类路径中。
或者,如果你很懒,并且不在乎忽略所有最佳实践(即,如果这是一个玩具程序等)
$ jar -xvf <whatever>.jar
将文件从 jar 解压到当前目录,此时您可以正常使用它们。如果您使用的是 Windows,则可以通过任何为您处理 .zip 文件的程序来执行此操作 - .jar 只是带有清单的 .zip。
我认为你可以通过反思来做到这一点。
编辑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!
您甚至不必从默认包中导入该类。现在你有了它的一个实例,所以你可以做任何你想做的事情。