【问题标题】:Tell javac to read class/interface dependency from classfile告诉 javac 从类文件中读取类/接口依赖项
【发布时间】:2017-08-30 17:24:35
【问题描述】:

我正在尝试使用 java 来查看是否可以将插件系统构建到我的应用程序中。 我希望插件遵守的一条规则是它们需要实现接口Cake。 我的目录是:

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

Cake.javaFoo.java 在包中 test.packageBar.java 在包中可以说是 plugin.stuff 包(因为我无法控制它,它当然可以是任何东西)。 Foo.javaCake.java 编译成 JBC (JavaByteCode) 没有问题。

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

为了澄清我希望能够从:

Foo.class
Cake.class
Bar.java

到:

Foo.class
Cake.class
Bar.class

【问题讨论】:

  • 不清楚您在这里要做什么。你说过插件必须实现Cake。为此,他们必须至少拥有Cake 接口(@98​​7654339@,通常包装在一个罐子中)。无论如何,your 代码不必从类文件中显式地动态加载Cake(用于运行程序的类加载器——例如内置于java 工具中的类加载器——将去做)。为什么你认为它需要?
  • 我是否必须将 .class 文件包装在 jar 中才能使用该类文件中的类或接口来编译 .java 类?不能直接提供.class文件吗?
  • 不,你不必把它包在罐子里,这就是我说“通常”的原因。 .class 文件就足够了。
  • 只要在CLASSPATH上可以找到Java类,就会被使用。
  • 运行“javac Bar.java”时出现错误“Bar.java:3: error expected import ./test.package.DisplayPlugin;”

标签: java class terminal javac


【解决方案1】:

好的,我发现了错误,或者至少我得到了它的工作。 由于文件Foo.classCake.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 文件中生成。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多