编译缺少代码部分的Java类

时间:2011-01-11 19:55:20

标签: java compiler-construction

我正在寻找一些关于如何编译Java代码以及其他一些代码缺失(方法调用)的想法。我完全清楚,如果找不到所有依赖项,javac将不允许您编译Java文件。但也许有一些方法可以绕过它,比如强制编译 我的字节码知识不太好,但我认为一些方法调用只是带有参数的类和方法名称的完整包定义。因此,如果编译器只是将此数据放入类文件并假设在运行过程中依赖性将是可用的(如果不是简单的NoSuchMethodExp)。

到目前为止,我找到的唯一解决方法是使用空方法创建空缺少的类文件以“欺骗”编译器。工作完美,但应该有更简单的方式:) 有什么想法吗?

5 个答案:

答案 0 :(得分:3)

使用界面。

创建具有所需方法的接口。在运行时,注入(Spring,Guice等)或生成(cglib ...)实现该接口的类。

答案 1 :(得分:1)

运气不好!可能你所能做的只是为了编译代码而为缺少的代码部分创建模拟对象(空方法,因此编译器可以找到它)。
另一个问题 - 如果你错过了一些课程,你将如何执行该代码?

根据提供的信息

更新

好吧,还有另一个选项来修改jar中的类,你可以使用AOP,并完成阅读AspectJ - 实际上对我来说这是最简单的选择(通常你需要花时间模拟对象写空方法,所以我会花时间研究新技术,这将有很多次帮助你;)
如果使用Eclipse,最简单的实现方法是:

  1. 安装AJDT
  2. 创建方面项目
  3. 创建修改代码的方面(取决于您需要更改的内容)
  4. 添加您要修改的jar文件
  5. 立即修改代码 另一个已经打包的jar文件
  6. 神奇地听起来:) 在这种情况下,除了您添加的新代码所需的库之外,您在类路径中不需要任何依赖项!

答案 2 :(得分:1)

如果您正在修改jar,则可以将未修改的类文件解压缩到另一个目录,并将其包含在类路径中。这样他们将可供编译器使用。

答案 3 :(得分:0)

方法不是依赖项。它们是类定义的一部分。 java运行时查找方法定义的唯一位置是在编译时和其父类中编译的类def。如果你的问题是超级课程不完整,我认为我不能帮助你。

如果没有,您可以将其中一些方法定义为抽象,而不是让子类实现它们。

答案 4 :(得分:0)

缺少哪种代码?通常,如果您引用编译器找不到的库,就会发生这种情况。也许您只需要扩展编译器正在搜索类的类路径。

如果您确实引用了尚未提供的代码,则需要至少实现您引用的那些方法。但这听起来很奇怪......也许你可以解决问题。

相关问题