告诉javac从类文件中读取类/接口依赖关系
我正在用java进行实验,看看是否可以在我的应用程序中构建一个插件系统。 我希望插件遵守的一条规则是,它们需要实现接口告诉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中(因为我不控制它,它当然可以
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