当前位置: 首页 > 面试题库 >

创建.java文件,并在运行时将其编译为.class文件

孟楷
2023-03-14
问题内容

我正在使用XJC从XSD文件生成一堆.java文件。我还需要将这些文件编译为.class文件,并在运行时通过反射使用它们。

我遇到的问题是,在生成.java文件并尝试对其进行编译之后,编译器无法正确地对其进行编译,并给我以下错误:

.\src\com\program\data\ClassOne.java:44: error: cannot find symbol
    protected List<ClassTwo> description;
                   ^
  symbol:   class ClassTwo
  location: class ClassOne

我假设这与JVM不了解我刚刚生成的包,因此找不到引用的类有关。

这可以通过在生成.java文件后重新启动程序来解决。但是我很好奇,是否有一种方法可以在运行时执行两个步骤而无需重新启动。

我已经研究了在运行时“刷新”类路径上哪些包的方法,但是没有运气。

这是我用来编译文件的方法。

public static void compile(Path javaPath, String[] fileList) {
    for (String fileName : fileList) {
        Path fullPath = Paths.get(javaPath.toString(), fileName);

        JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
        compiler.run(null, null, null, fullPath.toString());
    }
}

问题答案:

所以我终于想通了…

显然,您可以一次将多个文件传递给编译器,这可以解决符号错误。多么愚蠢的简单解决方案。

public static void compile(String... files) {
    JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
    compiler.run(null, null, null, files);
}


 类似资料:
  • 免责声明:这个问题有一个类似的解决方案,可以说是“如何在Windows上从命令行运行Java程序?”的重复,但我仍然相信它可以帮助那些像我一样问同样错误问题的人。 正如在注释中可以发现的那样,我的错误是期望编译器溢出一个无扩展的可执行文件(像C中一样),但相反,我只看到一个.class文件正在创建,导致我错误地运行 如果发生这种情况,只需运行,不带扩展名,代码将正确运行。

  • 问题内容: 我正在处理文件中的序列化和反序列化。而且,我正在堆叠使用with 。问题是我有服务器/客户端聊天应用程序,无论何时连接客户端,服务器都必须检查连接的客户端是否已注册。因此,当客户端连接到服务器时,服务器会创建一个输出流,例如 获取链接列表以检查此列表是否包含此对象。但是,总是创建一个没有内容的新文件。我知道是否将“ true”值作为附加文件的第二个参数传递,但是此.txt文件应仅包含一

  • 问题内容: 我需要一些帮助来创建文件 我在过去的几个小时中尝试使用RandomAccessFile并尝试实现下一个逻辑: 获取文件对象 创建一个具有相似名称的临时文件(我如何确保将临时文件与给定的原始文件放置在同一位置?) 写入此文件 用临时文件替换磁盘上的原始文件(应使用原始文件名)。 我正在寻找一个简单的代码,谁喜欢使用RandomAccessFile,我只是不正确地解决这几个步骤。 编辑:好

  • 问题内容: 我正在学习有关Android应用程序开发的课程,并尝试创建xml文件并将其写入android的内部存储中。就方法而言,我在最初设置时遇到问题。我已经写了大部分,但有我无法弄清的错误。也许因为我整天都在工作,所以不知道。这是我本节课的代码。我遇到的错误是公共String宝藏和FileOutputStream上的非法修饰符。任何帮助,将不胜感激。 好的,我找出了最初的问题,需要使用try

  • 问题内容: IntelliJ是否一直在编译,因为出现错误时它会用红色的蠕变线告诉我?(除了自动完成功能之外)还是在进行某种伪编译? 如果它正在进行合法的编译,那么将这些编译后的类放在哪里?我想将我的JRebel指向该目录,而不是单个模块目标文件夹。 问题答案: Meo是正确的,根据我在开发用于自定义语言的插件时所学到的知识,IntelliJ不会编译任何内容,除非您明确创建项目。在键入时,其词法分析

  • 虽然这似乎是件容易的事,但我找不到答案。 我想实现的很简单。我有一个带有java源文件的文件夹,我想在一个新项目中使用eclipse编辑它们。但是在运行应用程序时,我不想eclipse将工作区项目文件夹用作“根”,而是应该使用带有java源文件的文件夹。 其效果应该类似于使用文本编辑器直接打开源文件并对其进行更改,但这应该通过eclipse项目完成,但仍然使用原始文件夹来运行应用程序。 我只想拥有