告诉javac从类文件中读取类/接口依赖关系

告诉javac从类文件中读取类/接口依赖关系,java,class,terminal,javac,Java,Class,Terminal,Javac,我正在用java进行实验,看看是否可以在我的应用程序中构建一个插件系统。 我希望插件遵守的一条规则是,它们需要实现接口Cake。 我的目录是: Projectfolder bin Foo.class Cake.class src Foo.java Bar.java Cake.java Cake.java和Foo.java在包test.package和Bar.java在包plugin.stuff中(因为我不控制它,它当然可以

我正在用java进行实验,看看是否可以在我的应用程序中构建一个插件系统。 我希望插件遵守的一条规则是,它们需要实现接口
Cake
。 我的目录是:

Projectfolder
   bin
      Foo.class
      Cake.class
   src
      Foo.java
      Bar.java
      Cake.java
Cake.java
Foo.java
在包
test.package
Bar.java
在包
plugin.stuff
中(因为我不控制它,它当然可以是任何东西)。
Foo.java
Cake.java
编译成JBC(JavaByteCode)没有问题

因为我不想把我的应用程序代码发送给所有对创建插件感兴趣的人,所以我想从它的.class文件中阅读有关接口
Cake
(在
Bar.java
中实现)的信息。这可能吗? 需要什么javac命令来告诉javac从
Cake.class
获取依赖项
Cake

为了澄清,我希望能够:

Foo.class
Cake.class
Bar.java
致:


好吧,我发现了错误,或者至少我让它工作了。 由于文件
Foo.class
Cake.class
未放置在文件夹
src/test/package/
中,因此未找到类/接口

创建此层次结构时:

Projectfolder
   bin
      test
         package
            Foo.class
            Cake.class
   src
      Bar.java

在bin文件夹中运行命令
javac..\src\Bar.java
,然后命令运行正常,
Bar.class
文件在
src
文件夹中
Bar.java
文件旁边生成。

不清楚您在这里尝试做什么。您说过插件必须实现
Cake
。要做到这一点,他们必须至少拥有
Cake
接口(
Cake.class
,通常包装在一个jar中)。无论如何,您的代码不必显式地动态地从类文件中加载
Cake
(用于运行程序的类加载器——比如内置在
java
工具中的类加载器——将完成这项工作)。为什么您认为需要这样做?我是否必须将.class文件包装在jar中,以便能够使用该类文件中的类或接口来编译.java类?不可能直接提供.class文件吗?不,你不必把它包装在一个罐子里,这就是为什么我说“通常”。所需要的就是
.class
文件。只要可以在上面找到Java类,就可以使用它。在运行“javac Bar.Java”时,我得到错误“Bar.Java:3:错误预期导入。/test.package.DisplayPlugin
Projectfolder
   bin
      test
         package
            Foo.class
            Cake.class
   src
      Bar.java