我有一个.jar,其中包含一个我想要使用的类:FooBar.class。这个类不在一个包中,它只是位于.jar的根目录中。
我已将.jar作为库添加到项目中,但问题是,我不知道如何导入它,因为它不在包中。
如果我这样做:import FooBar;
我收到错误:. expected
,我无法在任何地方使用FooBar
类,因为它显示Symbol not found
。
有什么想法吗?
答案 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!
您甚至不必从默认包中导入该类。现在你有一个实例,所以你可以做任何你想做的事。