【问题标题】:How to validate generated Java code's syntax?如何验证生成的 Java 代码的语法?
【发布时间】:2011-04-11 13:11:37
【问题描述】:

我制作了一个小应用程序来根据一组信息生成 Java 测试类。基本上,我正在生成我们正在使用的库所需的样板代码。

我想以更好的方式测试生成的代码,而不仅仅是将输出与预期的字符串进行比较。

  • 是否有任何工具可以测试 Java 代码是否包含错误?
  • 是否有任何工具可以确定 Java 文件是否可以编译?
  • 对于这种情况我应该使用什么策略(我正在考虑使用 Class 类来获取有关该类的信息)?

【问题讨论】:

  • 你总是可以尝试编译代码...
  • 在前 2 个要点中使用 javac 有什么问题?
  • 嗯.. 没什么问题。我从来没有教过从 java 编译 java 代码。我会在谷歌上搜索一下。谢谢。
  • 你要google一下编译器?

标签: java design-patterns code-generation compilation


【解决方案1】:
  • 是否有任何工具可以测试 Java 代码是否包含错误?

  • 是否有任何工具可以确定 Java 文件是否可以编译?

  • 在这种情况下我应该使用什么策略?

是 - 使用 Java 编译器编译文件。

请注意,您可以使用Runtime.exec(...)JavaCompiler API 在运行时调用Java 编译器。后一种方法描述于:

还有很多关于这个主题的其他资源。

但是,您的主要目标似乎是检查您的生成器正在生成正确的 Java 代码;例如作为应用程序测试的一部分。为此,最简单的方法是将问题卸载到使用 javac 的 shell 脚本以使用适当的类路径编译代码,检查编译器的返回代码,并 greps 编译器输出中的错误和警告消息。

但是...您可能知道...只是编译生成的代码并不能保证它是正确的。


我正在考虑使用Class 类来获取有关该类的信息。

那没用。 Class 类仅与已被 JVM 成功编译并成功加载的类相关。即使这样,它也不会告诉您原始代码中是否存在语法(或其他)错误。

【讨论】:

    【解决方案2】:

    Java 6 引入了编译器 API。这可用于在不调用外部编译器的情况下编译 Java 代码。这是一个简短的introduction

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-05
      • 2010-09-07
      • 1970-01-01
      • 1970-01-01
      • 2022-10-24
      • 1970-01-01
      相关资源
      最近更新 更多