【问题标题】:Is it possible to compile a java file without providing its dependencies?是否可以在不提供依赖项的情况下编译 java 文件?
【发布时间】:2011-09-20 03:02:48
【问题描述】:

有一个java文件,里面有一些依赖jar。但是现在,我没有那些 jars,我必须将它编译成一个 .class 文件。

可以这样做吗?


更新

感谢您的回答。

起初,我认为我们可以为缺少的依赖项创建一些存根,这很容易但很无聊。既然我们可以在不丢失存根的情况下创建存根来让编译器满意,为什么我们不能让一个工具自动完成呢?该工具不需要创建存根,而是读取 java 文件,收集信息,然后构建 .class 文件。

但是如果java文件中的“import”语句中包含“*”,那就有问题了:

import aaa.*
import bbb.*

public class Hello {
   World world;
}

我们不知道“World”类是在包“aaa”还是“bbb”下。如果我们不熟悉缺少的依赖项,我们甚至不知道如何为“World”类创建存根。

但是如果“导入”语句是明确的,我认为是可能的,但也许没有人会写这样的工具

【问题讨论】:

  • 我的猜测是:完成后,您将如何处理类文件?如果无法运行代码进行测试,如何确定代码是正确的?
  • 如果您进行 Android 开发,Android 工具会附带 Android SDK 所需的所有类的存根版本。在android.jar 中的类文件上运行javap,看看我的意思。有没有可能有人的工作就是整天坐在那里写存根?是的。有可能吗?不,所以你可以尝试浏览 Android 代码库,看看他们做了什么。如果我要自己编写这样的工具,我可能会从 Codemodel 开始(来自stackoverflow.com/questions/121324/…

标签: java compilation


【解决方案1】:

您可能会发疯,将所需的依赖项手工制作为存根,除了让编译器满意之外什么都不做。

【讨论】:

  • +1 - 不过不必发疯,只需将鼠标悬停在 Eclipse 中缺少的类上,然后单击上下文菜单中的“创建类 'xxxx'”。您可以对缺失类中的所有必需方法执行相同操作。
  • 当我想从真正的 jar 中调用真正的方法时?
  • 在运行时你需要真正的依赖关系,存根只有它们用于编译,使用模拟框架可以帮助测试。
【解决方案2】:

没有。对不起。您需要编译类路径中的所有依赖项。

【讨论】:

    【解决方案3】:

    没有。但是,如果您尝试编译的代码仅直接使用少数几个类,您可以提供依赖类文件的存根版本。

    那么理论上,如果您使用 .class 文件进行编译并将真正的依赖项放在类路径中,您的应用程序将使用正确的(非存根)依赖项类运行。

    【讨论】:

      【解决方案4】:

      在编译任何文件之前,它总是会查找任何依赖项。 但是你说你没有那些罐子!!!

      看看您是否可以删除该项目/文件的依赖关系,然后尝试编译它。试试看!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-25
        • 1970-01-01
        • 1970-01-01
        • 2014-01-24
        • 1970-01-01
        相关资源
        最近更新 更多