我有一个包含我想使用的类的.jar:FooBar.class。这个类不在包中,它只是坐在.jar的根目录下。如何从不在包中的jar中导入Java类?
我已经将.jar作为库添加到项目中,但问题是,我不知道如何导入它,因为它不在包中。
如果我简单地做:import FooBar;
我得到的错误:. expected
,我不能使用FooBar
类的任何地方,因为它说Symbol not found
。
任何想法?
我有一个包含我想使用的类的.jar:FooBar.class。这个类不在包中,它只是坐在.jar的根目录下。如何从不在包中的jar中导入Java类?
我已经将.jar作为库添加到项目中,但问题是,我不知道如何导入它,因为它不在包中。
如果我简单地做:import FooBar;
我得到的错误:. expected
,我不能使用FooBar
类的任何地方,因为它说Symbol not found
。
任何想法?
您无法从默认包中导入。无论如何,你(或任何人写的)不应该使用默认包。除了非常小的示例程序外,您应该避免使用默认包。
如果是您的代码,请将其放入包中,因为它应该是。如果是别人的话,如果他们花时间为你打发时间,他们可以把它放在一个包里。
或者,省略导入,但记得在编译时将jar添加到类路径中。
另外,如果你是懒惰的,并且不关心忽略所有的最佳实践(例如,如果这是一个玩具程序等)
$ jar -xvf <whatever>.jar
从里面提取文件到当前目录,在此时您可以正常使用它们。如果你在Windows上,你可以通过任何程序处理.zip文件来做到这一点 - .jar只是一个带有清单的.zip文件。
我认为你可以用反射来做到这一点。
EDIT2:
好吧,也许你并不需要反思。我做了另一个测试,我直接实例化了Test并且它工作正常。所有你需要做的就是把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!
您甚至不必从默认包中导入该类。现在你有一个实例,所以你可以做任何你想做的事情。
-1为疯狂的建议使用反射。删除这个废品! – Ingo 2013-03-10 02:04:24
阅读:http://stackoverflow.com/questions/283816/how-to-access-java-classes-in-the-default-package。因此,您可能无法从命名包中访问默认包。可能有些情况下没有反思是不可能的。 – ktm5124 2013-03-10 02:17:38
+1,因为我不同意倒票。显然,问题是关于如何破解一些东西。因此,一些hacky的解决方案。其中一些并不总是有效,但就如何解决这个问题给出了一些想法。 – ATrubka 2013-03-10 03:12:50
对于不在明确包中的类,您不需要import语句。 – 2013-03-10 01:01:07
阅读:http://stackoverflow.com/questions/283816/how-to-access-java-classes-in-the-default-package。 – ktm5124 2013-03-10 02:24:32