繁体   English   中英

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

[英]How to import a Java Class from a jar which isn't in a package?

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

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

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

有任何想法吗?

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

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

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

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

$ jar -xvf <whatever>.jar

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

我想你可以用反思来做到这一点。

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!

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM